<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Sandeep Sangu</title>
    <description>The latest articles on DEV Community by Sandeep Sangu (@sandeepsangu).</description>
    <link>https://dev.to/sandeepsangu</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F794089%2F1f6771bb-4c2b-4c23-9097-800c644cbb85.jpg</url>
      <title>DEV Community: Sandeep Sangu</title>
      <link>https://dev.to/sandeepsangu</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sandeepsangu"/>
    <language>en</language>
    <item>
      <title>S3 Bucket Names Just Got Simpler — Here's What Actually Changed</title>
      <dc:creator>Sandeep Sangu</dc:creator>
      <pubDate>Sun, 05 Apr 2026 07:13:38 +0000</pubDate>
      <link>https://dev.to/aws-builders/s3-bucket-names-just-got-simpler-heres-what-actually-changed-262k</link>
      <guid>https://dev.to/aws-builders/s3-bucket-names-just-got-simpler-heres-what-actually-changed-262k</guid>
      <description>&lt;p&gt;If you've worked with S3 for a while, you know the drill.&lt;/p&gt;

&lt;p&gt;You go to create a bucket, pick a name that makes sense for your project, and AWS tells you it's already taken. Not by you. Not by anyone in your org. Just — taken. Because S3 bucket names have always been globally unique across every account, every region, worldwide.&lt;/p&gt;

&lt;p&gt;So over time, most of us started appending things manually.&lt;/p&gt;

&lt;p&gt;Account IDs. Region names. Random strings. Whatever it took to avoid collisions. It worked, but everyone solved it differently, and it made naming messy and hard to standardize — especially across teams or in automation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What AWS introduced&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;AWS recently released account and regional namespaces for S3 general purpose buckets.&lt;/p&gt;

&lt;p&gt;In practical terms — bucket names are no longer fighting for global uniqueness. They're now scoped to your AWS account and region. A bucket created under this model gets a suffix like:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;mybucket-123456789012-us-east-1-an&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;-an&lt;/code&gt; suffix indicates the account + regional namespace — AWS appends the full suffix automatically.&lt;/p&gt;

&lt;p&gt;What's interesting here is AWS didn't invent a new pattern. They looked at what engineers were already doing — appending account IDs and regions — and formalized it. Same idea, now built in and enforced.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How this changes day-to-day work&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The biggest shift is in predictability.&lt;/p&gt;

&lt;p&gt;Before, you couldn't be sure a name was available until you tried to create the bucket. In automation or IaC, that meant handling failures, adding retries, or generating random suffixes just to be safe.&lt;/p&gt;

&lt;p&gt;Now with &lt;code&gt;CloudFormation&lt;/code&gt;, you can directly reference:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;${AWS::AccountId}-${AWS::Region}&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;And get a deterministic name that won't collide. No guessing, no workarounds, no surprise failures mid-pipeline.&lt;/p&gt;

&lt;p&gt;For teams managing multiple environments — dev, test, prod — or running multi-account setups, this removes a small but persistent source of friction. Naming becomes consistent, automation becomes cleaner, and onboarding new environments gets a bit more straightforward.&lt;/p&gt;

&lt;p&gt;There's also a governance angle worth mentioning. With IAM and SCPs, you can now enforce that buckets are only created within your account's namespace. That means teams across a large org follow the same pattern by default — not by convention, but by policy.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What to keep in mind&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This doesn't replace all naming discipline.&lt;/p&gt;

&lt;p&gt;Existing buckets stay as they are — no migration path, no renaming. The suffix also takes up characters, so if you're working close to the 63-character limit, that's something to account for. Cross-account workflows still benefit from clear conventions on top of this. And any tooling that assumes global uniqueness may need a second look.&lt;/p&gt;

&lt;p&gt;It's a meaningful improvement, not a complete overhaul.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Worth knowing about&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is the kind of change that doesn't make headlines but quietly improves how you work — especially if you're deep in IaC, managing multiple accounts, or building platform tooling for other teams.&lt;/p&gt;

&lt;p&gt;AWS formalized something the community was already doing. And that's often where the most useful improvements come from.&lt;/p&gt;

&lt;p&gt;If you're setting up new buckets or revisiting your naming conventions, worth giving this a look.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Read more&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://aws.amazon.com/blogs/aws/introducing-account-regional-namespaces-for-amazon-s3-general-purpose-buckets/" rel="noopener noreferrer"&gt;AWS Blog — Account Regional Namespaces for S3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://aws.amazon.com/about-aws/whats-new/2026/03/amazon-s3-account-regional-namespaces/" rel="noopener noreferrer"&gt;AWS What's New&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>aws</category>
      <category>s3</category>
      <category>iac</category>
      <category>devops</category>
    </item>
    <item>
      <title>Interested in the AWS Community Builders program?</title>
      <dc:creator>Sandeep Sangu</dc:creator>
      <pubDate>Wed, 31 Dec 2025 13:15:46 +0000</pubDate>
      <link>https://dev.to/aws-builders/interested-in-the-aws-community-builders-program-5a1g</link>
      <guid>https://dev.to/aws-builders/interested-in-the-aws-community-builders-program-5a1g</guid>
      <description>&lt;p&gt;As we head into 2️⃣0️⃣2️⃣6️⃣, thought I’d share something that might help if you’re building on AWS.&lt;/p&gt;

&lt;p&gt;Almost a year ago, I was selected as an AWS Community Builder. &lt;a href="https://lnkd.in/gDDwKE5j" rel="noopener noreferrer"&gt;https://lnkd.in/gDDwKE5j&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;What stood out most: the program isn't about posting everywhere or chasing visibility - it's about being consistent with what you build, learn, and share.&lt;/p&gt;

&lt;p&gt;In practice, that means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Building and learning at your own pace&lt;/li&gt;
&lt;li&gt;Focusing on understanding, not just outcomes&lt;/li&gt;
&lt;li&gt;Sharing learnings that are practical and honest&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Yes, there are benefits:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;$500 AWS Credits - freedom to experiment, learn, and build without cost being the first constraint&lt;/li&gt;
&lt;li&gt;Free certification vouchers - validate skills you're already applying&lt;/li&gt;
&lt;li&gt;Premium learning access - valuable if used with intent&lt;/li&gt;
&lt;li&gt;Direct access to AWS experts and teams - practical conversations and feedback&lt;/li&gt;
&lt;li&gt;Exclusive events, early access, and yes… swag&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But the real value is the people - builders who are practical, curious, and open about what worked (and what didn't).&lt;/p&gt;

&lt;p&gt;If you're already building on AWS, documenting what you learn, or helping others in small but meaningful ways - you're already aligned with what this program looks for.&lt;/p&gt;

&lt;p&gt;Interested in the next cohort?&lt;br&gt;
Join the waitlist 👉 &lt;a href="https://pulse.aws/application/BM2AKLSX" rel="noopener noreferrer"&gt;https://pulse.aws/application/BM2AKLSX&lt;/a&gt;&lt;/p&gt;

</description>
      <category>awscommunity</category>
      <category>awscommunitybuilder</category>
    </item>
    <item>
      <title>Amazon Nova, Explained the Way I Wish Someone Had</title>
      <dc:creator>Sandeep Sangu</dc:creator>
      <pubDate>Wed, 16 Jul 2025 09:05:41 +0000</pubDate>
      <link>https://dev.to/aws-builders/amazon-nova-explained-the-way-i-wish-someone-had-39e7</link>
      <guid>https://dev.to/aws-builders/amazon-nova-explained-the-way-i-wish-someone-had-39e7</guid>
      <description>&lt;p&gt;I’ve seen a few articles and docs about &lt;code&gt;Amazon Nova&lt;/code&gt; already, but I wanted to try it myself and understand it in a way that actually clicks.&lt;br&gt;&lt;br&gt;
This write-up is just my take — the kind of explanation I wish I had when I first came across it.&lt;/p&gt;

&lt;p&gt;Hopefully, it helps someone else too🤞&lt;/p&gt;
&lt;h2&gt;
  
  
  A Quick Look at Nova Models — In Simple Terms
&lt;/h2&gt;

&lt;p&gt;Before diving deeper, here's a simple breakdown of the different Nova models.  &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Nova isn't just one model — it's a family built for different kinds of tasks.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;
  
  
  🧠 Understanding Models — &lt;strong&gt;Text, image, or video in → Text out&lt;/strong&gt;
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;Great for reasoning, summarizing, answering questions, or writing code.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Nova Micro&lt;/strong&gt; – Lightweight, cost-efficient
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Nova Lite&lt;/strong&gt; – Balanced speed and quality
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Nova Pro&lt;/strong&gt; – More capable, handles complex prompts better
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Nova Premier&lt;/strong&gt; – Most advanced, highest accuracy&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  🎨 Creative Models — &lt;strong&gt;Text or image in → Image or video out&lt;/strong&gt;
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;Used for generating banners, visuals, or animated content.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Nova Canvas&lt;/strong&gt; – Creates images from prompts
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Nova Reel&lt;/strong&gt; – Generates short videos&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  🎤 Speech Model — &lt;strong&gt;Speech in → Speech + text out&lt;/strong&gt;
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;Useful for real-time, human-like voice conversations.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Nova Sonic&lt;/strong&gt; – You speak to it, and it replies back with speech — while also giving you the text version of the response.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;📌 All of these models run inside &lt;strong&gt;Amazon Bedrock&lt;/strong&gt; — no setup required.&lt;/p&gt;
&lt;h3&gt;
  
  
  What Even is &lt;code&gt;Amazon Nova&lt;/code&gt;? (And No, It’s Not Just Another Chatbot)
&lt;/h3&gt;

&lt;p&gt;When I first heard about Nova, I honestly thought — &lt;em&gt;Okay, maybe AWS finally made their version of ChatGPT&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;But once I actually started using it, that idea didn’t hold up.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Nova isn’t just another chatbot.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It’s Amazon’s own &lt;code&gt;foundation model&lt;/code&gt; — built by &lt;code&gt;AWS&lt;/code&gt;, not licensed from OpenAI or Anthropic.&lt;/p&gt;

&lt;p&gt;Think of it like this:&lt;/p&gt;

&lt;p&gt;🛠️ &lt;em&gt;If other &lt;code&gt;Bedrock&lt;/code&gt; models are rented engines, &lt;code&gt;Nova&lt;/code&gt; is the one AWS built in-house.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Just like Google has Gemini and OpenAI has GPT, &lt;strong&gt;Amazon now has Nova&lt;/strong&gt; — and it's their own stack, optimized to run well within AWS environments.&lt;/p&gt;

&lt;p&gt;It runs inside &lt;code&gt;Amazon Bedrock&lt;/code&gt; — no setup needed. Just open the playground and start asking.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Nova&lt;/code&gt; isn’t trying to be a friendly chat assistant like GPT-4 — it’s built for &lt;code&gt;focus&lt;/code&gt;, &lt;code&gt;clarity&lt;/code&gt;, and &lt;code&gt;AWS-native&lt;/code&gt; tasks.&lt;/p&gt;
&lt;h2&gt;
  
  
  🛠 What I Tried — Real Prompts, Real Results
&lt;/h2&gt;

&lt;p&gt;I wanted to test something practical — not just chatting or generating summaries, but something an &lt;code&gt;SRE&lt;/code&gt; or &lt;code&gt;DevOps&lt;/code&gt; engineer might actually run into on the job.&lt;/p&gt;

&lt;p&gt;So I asked &lt;code&gt;Nova&lt;/code&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;“Write a CloudWatch Logs Insights query to find all failed login attempts from IPs starting with &lt;code&gt;192.168.&lt;/code&gt; over the past 24 hours.”&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Here’s what Nova gave back:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="n"&gt;fields&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="nb"&gt;timestamp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ipAddress&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;eventType&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;filter&lt;/span&gt; &lt;span class="n"&gt;eventType&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'failed_login'&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;filter&lt;/span&gt; &lt;span class="n"&gt;ipAddress&lt;/span&gt; &lt;span class="k"&gt;like&lt;/span&gt; &lt;span class="o"&gt;/^&lt;/span&gt;&lt;span class="mi"&gt;192&lt;/span&gt;&lt;span class="err"&gt;\&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;168&lt;/span&gt;&lt;span class="err"&gt;\&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;sort&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="nb"&gt;timestamp&lt;/span&gt; &lt;span class="k"&gt;desc&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="k"&gt;limit&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And it didn’t stop there — it explained what each part of the query did, including a reminder to adjust field names based on how your logs are structured.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8acbo79z8l9a24dyruvr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8acbo79z8l9a24dyruvr.png" alt="Nova Explanation" width="800" height="468"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This output felt on point. It wasn’t overexplained. It wasn’t vague. It was just… useful. The kind of thing you could actually copy into CloudWatch and run — and that’s exactly what I wanted from Nova.&lt;/p&gt;

&lt;h3&gt;
  
  
  🎬 But That’s Not All — I Couldn’t Resist Trying the Others
&lt;/h3&gt;

&lt;p&gt;Once I saw how well Nova handled a real-world prompt, I got curious.&lt;/p&gt;

&lt;p&gt;After all, Nova isn’t just one model — it’s a whole family designed for different kinds of tasks. So I naturally wandered into the &lt;strong&gt;Video and Image playgrounds&lt;/strong&gt; to explore a few more.&lt;/p&gt;

&lt;p&gt;Here’s what I explored next 👇&lt;/p&gt;

&lt;p&gt;I did try a few prompts — the outputs were interesting, some even quite impressive. That said, the best results come when you really understand the model, follow the documentation, and craft precise prompts tailored to its strengths.&lt;/p&gt;

&lt;p&gt;I couldn’t grab the exact one I generated, but the exploration itself was eye-opening — and here are a few links that can guide you through your own.&lt;/p&gt;

&lt;p&gt;🔗 &lt;strong&gt;Helpful Links to Explore Nova Further:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;📘 &lt;a href="https://docs.aws.amazon.com/ai/responsible-ai/nova-reel/overview.html" rel="noopener noreferrer"&gt;Nova Reel Overview – AWS Docs&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;🎬 &lt;a href="https://www.amazon.science/blog/amazon-nova-reel-examples" rel="noopener noreferrer"&gt;Nova Reel Examples – Amazon Science&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;🧠 &lt;a href="https://docs.aws.amazon.com/nova/latest/userguide/prompting-image-generation.html" rel="noopener noreferrer"&gt;Prompting for Image Generation – Nova Docs&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;🎯 &lt;a href="https://docs.aws.amazon.com/nova/latest/userguide/prompting-precision.html" rel="noopener noreferrer"&gt;Prompting with Precision – Nova Docs&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;🧾 &lt;a href="https://docs.aws.amazon.com/nova/latest/userguide/what-is-nova.html" rel="noopener noreferrer"&gt;What is Nova? – Main Docs&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;🧪 &lt;a href="https://nova.amazon.com/" rel="noopener noreferrer"&gt;Nova Playground – Explore Available Models&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;🧭 &lt;em&gt;Explore, experiment, and see where your creativity (and Nova) can take you. That’s Nova for you.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Nova feels especially suited for creative generation — like I mentioned earlier, when used right, it delivers.&lt;br&gt;
🎨 &lt;strong&gt;Creative Models — Text or image in → Image or video out&lt;/strong&gt;&lt;br&gt;
Perfect for banners, visuals, or short video storytelling.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Nova Canvas&lt;/strong&gt; → Creates high-quality images from text prompts&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Nova Reel&lt;/strong&gt; → Generates short cinematic videos&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Whether you're in marketing, advertising, or just like exploring creative tech — Nova gives you that starting spark.&lt;/p&gt;

&lt;p&gt;That’s the kind of simple starting point I wish I had — and hopefully, it gives you that same spark to dive in.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>nova</category>
      <category>bedrock</category>
      <category>genai</category>
    </item>
    <item>
      <title>My Profile Is Now Live on the New AWS Builder Center 🚀</title>
      <dc:creator>Sandeep Sangu</dc:creator>
      <pubDate>Sun, 13 Jul 2025 13:50:18 +0000</pubDate>
      <link>https://dev.to/aws-builders/my-profile-is-now-live-on-the-new-aws-builder-center-1752</link>
      <guid>https://dev.to/aws-builders/my-profile-is-now-live-on-the-new-aws-builder-center-1752</guid>
      <description>&lt;p&gt;&lt;strong&gt;Finally, my name is now live in the global AWS Community Builders directory — a much-awaited moment!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The new &lt;a href="https://builder.aws.com/" rel="noopener noreferrer"&gt;AWS Builder Center&lt;/a&gt; is officially live 🚀&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I’ve updated my profile: &lt;a href="https://builder.aws.com/community/@sandeepsangu" rel="noopener noreferrer"&gt;@sandeepsangu&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🤝 Let’s connect, keep building, and keep learning together!&lt;/p&gt;

&lt;p&gt;👉 Curious about the AWS Community Builders program?&lt;br&gt;
&lt;a href="https://builder.aws.com/connect/community/community-builders" rel="noopener noreferrer"&gt;Learn more here&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>aws</category>
      <category>cloud</category>
      <category>career</category>
      <category>community</category>
    </item>
    <item>
      <title>Going Serverless — Automating PDF Parsing with S3, Lambda &amp; DynamoDB (Part 2)</title>
      <dc:creator>Sandeep Sangu</dc:creator>
      <pubDate>Sat, 24 May 2025 06:37:01 +0000</pubDate>
      <link>https://dev.to/aws-builders/going-serverless-automating-pdf-parsing-with-s3-lambda-dynamodb-part-2-4hl2</link>
      <guid>https://dev.to/aws-builders/going-serverless-automating-pdf-parsing-with-s3-lambda-dynamodb-part-2-4hl2</guid>
      <description>&lt;h1&gt;
  
  
  🧭 Introduction
&lt;/h1&gt;

&lt;p&gt;In &lt;a href="https://dev.to/aws-builders/local-pdf-parsing-with-aws-textract-python-part-1-2iei"&gt;Part 1&lt;/a&gt;, I walked through a local-first approach to extract text from patient PDFs using &lt;code&gt;AWS Textract&lt;/code&gt; and &lt;code&gt;Python&lt;/code&gt;. The flow was straightforward place a PDF into a folder, run a script, and save the extracted content to a &lt;code&gt;.txt&lt;/code&gt; file. It helped validate Textract’s capabilities and gave a hands-on feel for the API — but everything was manual.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This project wasn’t built for perfection, but for practice, learning, and getting real with &lt;code&gt;AWS&lt;/code&gt; services.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In this second part, I wanted to push it a step further, simulating how such a process might work in a real backend environment by introducing automation, triggers, and storage. The goal: &lt;strong&gt;automate the entire PDF parsing flow using serverless AWS services&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;📌 &lt;strong&gt;Note&lt;/strong&gt;: The &lt;strong&gt;PDF upload step is still manual&lt;/strong&gt; in this setup. In real-world applications, scanned PDFs are usually sent to cloud storage (like &lt;code&gt;S3&lt;/code&gt;) automatically — through connected devices, backend apps, or scheduled jobs. For this hands-on practice, I’ve intentionally kept the upload step manual. But once a PDF lands in the bucket, everything else — processing, extraction, and storage — is fully automated.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  ⚙️ What This Part Covers
&lt;/h2&gt;

&lt;p&gt;In this article, I’ll walk through how I used the following &lt;code&gt;AWS&lt;/code&gt; services to automate the document extraction pipeline:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Amazon S3&lt;/strong&gt; — to hold the uploaded PDFs and trigger the processing flow&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AWS Lambda&lt;/strong&gt; — to extract content from PDFs using Textract&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Amazon DynamoDB&lt;/strong&gt; — to store structured patient records in a NoSQL format&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CloudWatch Logs&lt;/strong&gt; — to track execution flow and debug when needed&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The result is a working example of a &lt;strong&gt;lightweight, event-driven backend&lt;/strong&gt; that reacts to PDF uploads and processes them automatically — no scripts to run, no manual parsing.&lt;/p&gt;

&lt;h3&gt;
  
  
  🏥 Real-World Scenario: Why Automating PDF Processing Matters
&lt;/h3&gt;

&lt;p&gt;In industries like &lt;code&gt;healthcare&lt;/code&gt;, &lt;code&gt;insurance&lt;/code&gt;, and &lt;code&gt;legal&lt;/code&gt;, documents often arrive in the form of scanned PDFs — visit summaries, claim forms, contracts — all packed with valuable information that needs to be extracted, stored, and used downstream.&lt;/p&gt;

&lt;p&gt;Take hospitals for example: they deal with dozens or hundreds of patient summaries daily. Manually opening each file, reading the content, and entering it into a database isn’t just tedious — it’s error-prone and impossible to scale.&lt;/p&gt;

&lt;p&gt;That’s where &lt;code&gt;automation&lt;/code&gt; comes in.&lt;/p&gt;

&lt;p&gt;Instead of treating PDFs as static files, the idea is to turn them into &lt;code&gt;event-driven inputs&lt;/code&gt;. As soon as a document is uploaded, a backend system takes over — extracting key fields, storing them in structured formats like &lt;code&gt;DynamoDB&lt;/code&gt;, and making them available for future use (like reporting, analysis, or alerts).&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;📌 This project simulates exactly that — using &lt;code&gt;AWS&lt;/code&gt; services to mimic how such a backend might work. It's a hands-on demonstration of how automation bridges the gap between unstructured input and structured output.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;By the end of this flow, what would’ve taken minutes per file happens in seconds, without manual intervention (aside from the initial upload, which we kept manual here for simplicity).&lt;/p&gt;

&lt;h2&gt;
  
  
  🗺️ Architecture Overview
&lt;/h2&gt;

&lt;p&gt;To automate the document extraction flow, I used a combination of &lt;code&gt;AWS&lt;/code&gt; services that work together in an event-driven pipeline.&lt;/p&gt;

&lt;p&gt;Here's how it works at a high level:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Amazon S3&lt;/strong&gt; acts as the dropzone — when a new PDF is uploaded, it automatically triggers the next step.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AWS Lambda&lt;/strong&gt; is triggered by the S3 event and uses &lt;strong&gt;Amazon Textract&lt;/strong&gt; to extract text from the PDF.&lt;/li&gt;
&lt;li&gt;The extracted text is then parsed into structured fields (like &lt;code&gt;patient ID&lt;/code&gt;, &lt;code&gt;diagnosis&lt;/code&gt;, etc.).&lt;/li&gt;
&lt;li&gt;These records are stored in &lt;strong&gt;Amazon DynamoDB&lt;/strong&gt; — one item per patient.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Amazon CloudWatch Logs&lt;/strong&gt; captures logs throughout the flow to help monitor and debug.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;IAM roles&lt;/strong&gt; are used to allow services to communicate securely and perform their actions.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  🛠️ Step-by-Step Implementation
&lt;/h2&gt;

&lt;p&gt;Here’s a quick walkthrough of how I set things up, in the order I tackled each piece. Nothing overly complex — just enough to get a fully working flow from upload to database entry.&lt;/p&gt;

&lt;h3&gt;
  
  
  📁 1. S3 Setup — Upload as a Trigger
&lt;/h3&gt;

&lt;p&gt;I started by creating an S3 bucket to act as the dropzone for incoming PDFs. Every time a file is uploaded, it automatically triggers the next step.&lt;/p&gt;

&lt;p&gt;To do that, I added an &lt;strong&gt;S3 event trigger&lt;/strong&gt; to my Lambda function — specifically, an event of type &lt;code&gt;ObjectCreated&lt;/code&gt;. No folder structure or file filters for now, just a basic setup to keep it simple.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;⚠️ FYI: In production, you'd usually narrow this to a folder (prefix) or file type filter. For now, keeping it wide open helped test faster.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  ⚙️ 2. Lambda Function — Extract and Parse on the Fly
&lt;/h3&gt;

&lt;p&gt;Once a new PDF lands in the bucket, &lt;code&gt;Lambda&lt;/code&gt; takes over.&lt;/p&gt;

&lt;p&gt;The function:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pulls the PDF from &lt;code&gt;S3&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Sends it to &lt;strong&gt;Amazon Textract&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Parses the returned lines into structured fields&lt;/li&gt;
&lt;li&gt;Stores each parsed record into &lt;strong&gt;DynamoDB&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;Amazon Textract&lt;/code&gt; offers different operations depending on your document type.&lt;br&gt;
In this case, I used the &lt;a href="https://docs.aws.amazon.com/textract/latest/dg/how-it-works-detecting.html" rel="noopener noreferrer"&gt;&lt;code&gt;detect_document_text&lt;/code&gt;&lt;/a&gt; API — it’s fast, synchronous, and works well for clean printed documents like summaries or forms.&lt;/p&gt;

&lt;p&gt;For other use cases (like extracting forms or tables), you can explore &lt;a href="https://docs.aws.amazon.com/textract/latest/dg/how-it-works.html" rel="noopener noreferrer"&gt;Textract’s available operations here&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  🧾 3. Textract Output Processing — Turning Lines Into Records
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;Textract&lt;/code&gt; returns blocks of text as separate lines. I looped through each line and looked for patterns like &lt;code&gt;Patient Name:&lt;/code&gt;, &lt;code&gt;Diagnosis:&lt;/code&gt;, &lt;code&gt;Next Visit:&lt;/code&gt; etc.&lt;/p&gt;

&lt;p&gt;Whenever a new &lt;code&gt;Patient Name&lt;/code&gt; appeared, I considered that the start of a new record.&lt;/p&gt;

&lt;p&gt;This basic parsing logic worked well for my structured PDFs — and it gave me clean, key-value entries ready to store.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;✍️ The format of your source PDF matters. If you're working with messy scans or inconsistent layouts, you’ll likely need a smarter parser or post-processing.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  🗂️ 4. DynamoDB Storage — Saving Each Record
&lt;/h3&gt;

&lt;p&gt;Each parsed patient record is stored as a new item in my &lt;code&gt;DynamoDB&lt;/code&gt; table called &lt;code&gt;PatientRecords&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;I used &lt;code&gt;PatientID&lt;/code&gt; as the partition key. So before inserting each item, I made sure to normalize the field (&lt;code&gt;Patient ID&lt;/code&gt; → &lt;code&gt;PatientID&lt;/code&gt;) and skip any record that didn't include it.&lt;/p&gt;

&lt;p&gt;This way, only valid patient records are saved.&lt;/p&gt;

&lt;h3&gt;
  
  
  📜 5. Monitoring with CloudWatch Logs
&lt;/h3&gt;

&lt;p&gt;Every step — from event trigger to Textract response to final record insert — is logged automatically in &lt;code&gt;CloudWatch Logs&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;This was super helpful during testing. For example, I could easily see:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If Textract succeeded&lt;/li&gt;
&lt;li&gt;What records were parsed&lt;/li&gt;
&lt;li&gt;If anything failed validation (like missing a Patient ID)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Just head to the &lt;code&gt;Lambda&lt;/code&gt; &amp;gt; &lt;code&gt;Monitor&lt;/code&gt; tab to view the logs in context.&lt;/p&gt;

&lt;h3&gt;
  
  
  🔐 6. IAM Roles — Permissions That Make It Work
&lt;/h3&gt;

&lt;p&gt;To connect all these services securely, I created an &lt;strong&gt;IAM role for the Lambda function&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This role had the following policies attached:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;AmazonS3ReadOnlyAccess&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;AmazonTextractFullAccess&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;AmazonDynamoDBFullAccess&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;AWSLambdaBasicExecutionRole&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;⚠️ For this project, I also used an IAM user with broad access to set things up.&lt;br&gt;
But in real-world scenarios, always follow the &lt;strong&gt;principle of least privilege&lt;/strong&gt; — give only the permissions that are needed for the task, and nothing more.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  📸 Demo Output &amp;amp; Screenshots
&lt;/h3&gt;

&lt;p&gt;Let’s walk through what happens when the workflow runs end-to-end.&lt;/p&gt;

&lt;p&gt;Once a PDF is uploaded, the automation kicks in — &lt;code&gt;AWS Lambda&lt;/code&gt; gets triggered, calls &lt;code&gt;Textract&lt;/code&gt; to extract text, parses the extracted lines, and writes structured patient records into &lt;code&gt;DynamoDB&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Here’s the &lt;strong&gt;architecture diagram&lt;/strong&gt; that visually represents this flow:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyjzq107g3ykjfw1jue1q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyjzq107g3ykjfw1jue1q.png" alt="Image description" width="800" height="269"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Below, you’ll see a sample view of the &lt;code&gt;PatientRecords&lt;/code&gt; DynamoDB table — confirming that our extracted fields like patient name, ID, diagnosis, and next visit date have been stored properly:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftj2obbma9wq6f966mge8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftj2obbma9wq6f966mge8.png" alt="Image description" width="800" height="335"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can also view the detailed execution logs in &lt;strong&gt;CloudWatch&lt;/strong&gt;, which helps confirm the flow — from trigger to text extraction and database insertion. This is especially useful during debugging or validation in real-time scenarios.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq6rchvkpkargpqiv4u7a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq6rchvkpkargpqiv4u7a.png" alt="Image description" width="800" height="319"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Finally, here’s the raw output file that was extracted and stored locally during testing:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbmo8f0ytvc7hy0jsep6y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbmo8f0ytvc7hy0jsep6y.png" alt="Image description" width="708" height="901"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  🧠 Lessons Learned Along the Way
&lt;/h3&gt;

&lt;p&gt;Like most hands-on projects, this one came with a few surprises and learning moments.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Lambda Timeouts:&lt;/strong&gt;&lt;br&gt;
Initially, the &lt;code&gt;Lambda&lt;/code&gt; function timed out while waiting for &lt;code&gt;Textract&lt;/code&gt; to finish. Increasing the timeout duration solved it, but it reminded me to always plan for longer-running tasks when calling asynchronous services.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Parsing Gotchas:&lt;/strong&gt;&lt;br&gt;
While &lt;code&gt;Textract&lt;/code&gt; extracted text just fine, breaking it into structured records required some tweaking — especially for lines that didn’t follow a perfect format (like a missing &lt;code&gt;Patient ID&lt;/code&gt;). Adding logic to skip incomplete entries helped keep things clean.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;IAM Permissions:&lt;/strong&gt;&lt;br&gt;
The setup was smoother by assigning full access policies to the &lt;code&gt;IAM&lt;/code&gt; user and &lt;code&gt;Lambda&lt;/code&gt; role, but in real-world scenarios, we’d follow the &lt;strong&gt;least privilege&lt;/strong&gt; principle to secure each component properly.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ✅ Final Thoughts
&lt;/h3&gt;

&lt;p&gt;This project helped me explore how to bring automation into document parsing using AWS's serverless services. By combining &lt;code&gt;S3&lt;/code&gt;, &lt;code&gt;Lambda&lt;/code&gt;, &lt;code&gt;Textract&lt;/code&gt;, and &lt;code&gt;DynamoDB&lt;/code&gt;, I was able to simulate a lightweight backend workflow — one that reflects how real-world systems might handle scanned documents, such as patient summaries.&lt;/p&gt;

&lt;p&gt;While the initial PDF upload and script execution were still done manually for simplicity, everything that followed — from text extraction to structured storage — was &lt;code&gt;event-driven&lt;/code&gt; and fully automated.&lt;/p&gt;

&lt;p&gt;This setup lays the groundwork for more advanced ideas, like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Adding search or filter capabilities on top of DynamoDB&lt;/li&gt;
&lt;li&gt;Integrating analytics dashboards&lt;/li&gt;
&lt;li&gt;Using generative AI to summarize or classify extracted content&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Thanks for following along! 🙌&lt;br&gt;
I hope this gives you a practical feel for how serverless workflows can streamline everyday processes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Feel free to share your thoughts, ask questions, or &lt;a href="https://github.com/SandeepSangu/pdf-to-text-extractor" rel="noopener noreferrer"&gt;fork the repo&lt;/a&gt; to try it out yourself!&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>aws</category>
      <category>serverless</category>
      <category>lambda</category>
      <category>s3</category>
    </item>
    <item>
      <title>Local PDF Parsing with AWS Textract &amp; Python (Part 1)</title>
      <dc:creator>Sandeep Sangu</dc:creator>
      <pubDate>Sat, 10 May 2025 13:06:52 +0000</pubDate>
      <link>https://dev.to/aws-builders/local-pdf-parsing-with-aws-textract-python-part-1-2iei</link>
      <guid>https://dev.to/aws-builders/local-pdf-parsing-with-aws-textract-python-part-1-2iei</guid>
      <description>&lt;h1&gt;
  
  
  ✍️ Introduction
&lt;/h1&gt;

&lt;p&gt;Throughout my experience working with clients from domains like &lt;code&gt;healthcare&lt;/code&gt;, &lt;code&gt;insurance&lt;/code&gt;, and &lt;code&gt;legal&lt;/code&gt;, I often found myself curious about how certain backend document workflows functioned, especially in healthcare. While supporting these systems, I’d often get paged for incidents related to PDF pipelines: upload failures, script errors, or extraction gaps. At that stage, like many in support roles, we’re limited to handling outcomes rather than building or understanding the full solution.&lt;/p&gt;

&lt;p&gt;Over time, as we gain more experience, build trust, and make people feel confident in our abilities, we gradually get the opportunity to be part of architecture discussions and solution design conversations. But that curiosity about how these pipelines actually work — from PDF upload to raw text extraction — always stayed with me.&lt;/p&gt;

&lt;p&gt;So I decided to finally explore this from scratch, hands-on, and document it as a small weekend project. This repository reflects that journey — one that started with a question and ended with deeper insights, hands-on practice, and a working prototype. My hope is that others who share this curiosity will find this just as helpful.&lt;/p&gt;

&lt;h2&gt;
  
  
  🔍 What This Project Is
&lt;/h2&gt;

&lt;p&gt;This project focuses on extracting structured data from scanned or uploaded PDFs using &lt;code&gt;AWS Textract&lt;/code&gt;, starting with a local Python-based flow.&lt;/p&gt;

&lt;p&gt;It simulates real-world use cases commonly seen in &lt;strong&gt;healthcare&lt;/strong&gt;, &lt;strong&gt;legal&lt;/strong&gt;, and &lt;strong&gt;insurance&lt;/strong&gt; sectors — where physical documents like visit summaries or forms need to be digitized and stored in structured formats like databases.&lt;/p&gt;

&lt;p&gt;The goal?&lt;br&gt;
To break down what typically happens behind the scenes — from raw scanned input to clean, queryable output — using AWS-native services.&lt;/p&gt;

&lt;h2&gt;
  
  
  📄 Why Document Parsing Matters
&lt;/h2&gt;

&lt;p&gt;In many industries, large volumes of information are still locked inside unstructured files, like PDFs or images.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A &lt;strong&gt;hospital&lt;/strong&gt; stores patient visit summaries scanned from handwritten or printed forms.&lt;/li&gt;
&lt;li&gt;An &lt;strong&gt;insurance company&lt;/strong&gt; receives thousands of claim forms uploaded as PDFs every week.&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;legal team&lt;/strong&gt; scans documents, contracts, and evidence that need to be searchable.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Without parsing, this data remains buried and unusable.&lt;/p&gt;

&lt;p&gt;Document parsing — especially automated parsing — allows organizations to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Extract critical fields (like patient name, ID, diagnosis)&lt;/li&gt;
&lt;li&gt;Store them in structured systems (like &lt;code&gt;DynamoDB&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Enable downstream use (dashboards, alerts, summaries, etc.)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This project is a hands-on way to explore how that all comes together.&lt;/p&gt;

&lt;h2&gt;
  
  
  🧪 Local First: Why I Didn’t Start with Automation
&lt;/h2&gt;

&lt;p&gt;While it’s tempting to jump straight into Lambda functions and triggers, I deliberately started with a &lt;strong&gt;local-first mindset&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Why?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It helps build intuition: you understand exactly what Textract returns and how the parsing logic works.&lt;/li&gt;
&lt;li&gt;Easier to test and debug before handing things off to automation.&lt;/li&gt;
&lt;li&gt;You stay in control, tweaking and improving the logic before putting it behind an event trigger.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This mirrors how real-world teams prototype internally before scaling.&lt;/p&gt;

&lt;p&gt;In my case:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Took a sample patient visit summary in PDF format.&lt;/li&gt;
&lt;li&gt;Wrote a simple &lt;code&gt;Python&lt;/code&gt; script to call &lt;code&gt;AWS Textract&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Parsed the returned lines into structured fields.&lt;/li&gt;
&lt;li&gt;The script automatically saved the extracted text as a &lt;code&gt;.txt&lt;/code&gt; file inside &lt;code&gt;output-texts/&lt;/code&gt;. I opened it to manually check if Textract returned the expected content.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That local foundation made automation smoother and more predictable.&lt;/p&gt;

&lt;h1&gt;
  
  
  🧱 Prerequisites
&lt;/h1&gt;

&lt;p&gt;To follow along or replicate this project, ensure the following are in place:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;An &lt;code&gt;AWS&lt;/code&gt; account (root access only used for visual verification)&lt;/li&gt;
&lt;li&gt;A dedicated &lt;code&gt;IAM&lt;/code&gt; user with the following permission:

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;AmazonTextractFullAccess&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;
&lt;code&gt;AWS CLI&lt;/code&gt; installed and configured with the IAM user credentials&lt;/li&gt;

&lt;li&gt;
&lt;code&gt;Python&lt;/code&gt; 3.9+ installed&lt;/li&gt;

&lt;li&gt;
&lt;code&gt;virtualenv&lt;/code&gt; installed&lt;/li&gt;

&lt;li&gt;
&lt;code&gt;VS Code&lt;/code&gt; (or any preferred IDE)&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;You should also:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create a virtual environment (&lt;code&gt;python -m venv venv&lt;/code&gt;) and activate it.&lt;/li&gt;
&lt;li&gt;Install boto3 (&lt;code&gt;pip install boto3&lt;/code&gt;) and freeze dependencies into requirements.txt&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  📂 Project Structure
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pdf-to-text-extractor/
├── input-pdfs/                # Local test PDFs
├── output-texts/              # Extracted raw text output
├── scripts/                   # Python scripts
│   └── extract_textract.py
├── venv/                      # Virtual environment (ignored in git)
├── requirements.txt
├── .gitignore
└── README.md                  # Project Documentation
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Why &lt;code&gt;venv&lt;/code&gt; and &lt;code&gt;requirements.txt&lt;/code&gt; matter:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Using a &lt;code&gt;venv/&lt;/code&gt; keeps dependencies isolated — it’s a clean, repeatable habit in Python workflows.&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;requirements.txt&lt;/code&gt; file lists all the packages I used, so anyone can recreate the same environment instantly.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🧪 What the Local Script Does
&lt;/h2&gt;

&lt;p&gt;In this phase, wrote a simple Python script to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Load a PDF from the &lt;code&gt;input-pdfs/&lt;/code&gt; folder&lt;/li&gt;
&lt;li&gt;Send it to &lt;code&gt;Textract&lt;/code&gt; for text extraction&lt;/li&gt;
&lt;li&gt;Save the output to &lt;code&gt;output-texts/&lt;/code&gt; as a &lt;code&gt;.txt&lt;/code&gt; file&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This helped validate if Textract could read and extract meaningful content, before jumping into parsing or automation.&lt;/p&gt;

&lt;h2&gt;
  
  
  ✅ Outcome and What’s Next
&lt;/h2&gt;

&lt;p&gt;By the end of this phase, I had a working local prototype that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pulled a PDF from &lt;code&gt;input-pdfs/&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Extracted raw text using &lt;code&gt;AWS Textract&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Saved it to &lt;code&gt;output-texts/&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Gave me a chance to test and fine-tune the logic manually&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This local-first phase gave me the space to deeply understand what each piece does before scaling up.&lt;/p&gt;

&lt;h2&gt;
  
  
  🔗 References
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://boto3.amazonaws.com/v1/documentation/api/latest/index.html" rel="noopener noreferrer"&gt;Python &lt;code&gt;boto3&lt;/code&gt; Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.aws.amazon.com/textract/latest/dg/what-is.html" rel="noopener noreferrer"&gt;Amazon Textract Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.python.org/3/library/venv.html" rel="noopener noreferrer"&gt;Setting up a Python Virtual Environment&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pip.pypa.io/en/stable/user_guide/#requirements-files" rel="noopener noreferrer"&gt;What is &lt;code&gt;requirements.txt&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;📂 &lt;strong&gt;Explore the Full Codebase&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
All the files used in this local setup are available here:&lt;br&gt;&lt;br&gt;
🔗 &lt;a href="https://github.com/SandeepSangu/pdf-to-text-extractor/tree/main/local" rel="noopener noreferrer"&gt;GitHub Repo → pdf-to-text-extractor/local&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  🔜 Coming Up in Part 2:
&lt;/h3&gt;

&lt;p&gt;We’ll build on this by:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Triggering Textract via &lt;strong&gt;AWS Lambda&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Parsing and storing results in &lt;strong&gt;DynamoDB&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;We’ll automate everything after the upload — using &lt;strong&gt;AWS services&lt;/strong&gt; to handle extraction, parsing, and storage — just like a real-world backend system would.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;📘 Read Part 2 here: &lt;a href="https://dev.to/aws-builders/going-serverless-automating-pdf-parsing-with-s3-lambda-dynamodb-part-2-4hl2"&gt;Building a Serverless PDF Ingestion Flow&lt;/a&gt;&lt;/p&gt;

</description>
      <category>python</category>
      <category>aws</category>
      <category>textract</category>
      <category>documentprocessing</category>
    </item>
    <item>
      <title>Agile Methodology</title>
      <dc:creator>Sandeep Sangu</dc:creator>
      <pubDate>Wed, 24 Jul 2024 09:38:27 +0000</pubDate>
      <link>https://dev.to/sandeepsangu/agile-methodology-1l4o</link>
      <guid>https://dev.to/sandeepsangu/agile-methodology-1l4o</guid>
      <description>&lt;h2&gt;
  
  
  Introduction to Agile 🚀
&lt;/h2&gt;

&lt;p&gt;Agile is an &lt;strong&gt;iterative and incremental&lt;/strong&gt; approach to software development that emphasizes &lt;strong&gt;flexibility&lt;/strong&gt;, &lt;strong&gt;collaboration&lt;/strong&gt;, and &lt;strong&gt;customer satisfaction&lt;/strong&gt;. It's a mindset shift from traditional methods, allowing for changes even late in the development process.&lt;/p&gt;

&lt;h2&gt;
  
  
  Agile Principles 🌟
&lt;/h2&gt;

&lt;p&gt;The Agile methodology is based on 4 core values and 12 principles. The 4 core values are:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Individuals and Interactions&lt;/strong&gt; 🤝 over processes and tools&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Working Software&lt;/strong&gt; 💻 over comprehensive documentation&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Customer Collaboration&lt;/strong&gt; 🗣️ over contract negotiation&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Responding to Change&lt;/strong&gt; 🔄 over following a plan&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;These values guide the &lt;code&gt;12 principles&lt;/code&gt; of Agile, which are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Our highest priority is to satisfy the customer&lt;/strong&gt; by delivering valuable software early and continuously. 👍&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Welcome changing requirements&lt;/strong&gt;, even late in development. Agile processes harness change for the customer's competitive advantage. 🔄&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deliver working software frequently&lt;/strong&gt;, from a couple of weeks to a couple of months, with a preference for the shorter timescale. 🗓️&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Close, daily cooperation&lt;/strong&gt; between business people and developers. 🤝&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Projects are built around motivated individuals&lt;/strong&gt;, who should be trusted to get the job done. 💪&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Face-to-face conversation&lt;/strong&gt; is the most efficient and effective method of conveying information within a development team. 💬&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Working software is the primary measure of progress&lt;/strong&gt;. 📈&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agile processes promote sustainable development&lt;/strong&gt;. The sponsors, developers, and users should be able to maintain a constant pace indefinitely. 🌱&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Continuous attention to technical excellence&lt;/strong&gt; and good design enhances agility. 🛠️&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Simplicity&lt;/strong&gt;—the art of maximizing the amount of work not done—is essential. 🎨&lt;/li&gt;
&lt;li&gt;The best &lt;strong&gt;architectures, requirements, and designs emerge from self-organizing teams&lt;/strong&gt;. 🌟&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;At regular intervals&lt;/strong&gt;, the team reflects on how to become more effective, then tunes and adjusts its behavior accordingly. 🔍&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Agile Methodologies 🌐
&lt;/h2&gt;

&lt;p&gt;Agile is not a single methodology, but rather a set of values and principles that can be applied in various ways. Some popular Agile methodologies include:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Scrum 🏉
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Framework for managing and completing complex projects&lt;/li&gt;
&lt;li&gt;Emphasizes teamwork, accountability, and iterative progress&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Kanban 📊
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Visual system for managing work, emphasizing continuous flow&lt;/li&gt;
&lt;li&gt;Focuses on lead time, cycle time, and throughput&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Scrum Framework 🏉
&lt;/h2&gt;

&lt;p&gt;The Scrum framework consists of three roles, five ceremonies, and artifacts.&lt;/p&gt;

&lt;h3&gt;
  
  
  Roles 👥
&lt;/h3&gt;

&lt;h4&gt;
  
  
  1. Product Owner 📋
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Responsible for defining and prioritizing the product backlog&lt;/li&gt;
&lt;li&gt;Ensures the backlog is visible, transparent, and clear&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  2. Scrum Master 🧑‍🏫
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Facilitates Scrum and removes impediments&lt;/li&gt;
&lt;li&gt;Ensures the team follows Scrum principles and practices&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  3. Development Team 💻
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Cross-functional team that develops the product increment&lt;/li&gt;
&lt;li&gt;Self-organizing and responsible for meeting sprint goals&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Ceremonies ⏰
&lt;/h3&gt;

&lt;h4&gt;
  
  
  1. Sprint Planning 🗓️
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Time-boxed event to plan the upcoming sprint&lt;/li&gt;
&lt;li&gt;Team commits to delivering a specific set of work&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  2. Daily Scrum 🕒
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Time-boxed event for the team to synchronize and plan&lt;/li&gt;
&lt;li&gt;Each team member shares progress, plans, and impediments&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  3. Sprint Review 📝
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Time-boxed event to review the product increment&lt;/li&gt;
&lt;li&gt;Stakeholders provide feedback, and the team adapts&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  4. Sprint Retrospective 🔄
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Time-boxed event to reflect on the sprint and identify improvements&lt;/li&gt;
&lt;li&gt;Team discusses what went well, what didn't, and how to improve&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  5. Backlog Refinement 📋
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Ongoing process to keep the product backlog updated&lt;/li&gt;
&lt;li&gt;Team reviews and revises items in the backlog to ensure they are ready for future sprints&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Artifacts 📦
&lt;/h3&gt;

&lt;h4&gt;
  
  
  1. Product Backlog 📃
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Prioritized list of features or user stories&lt;/li&gt;
&lt;li&gt;Refined and updated regularly by the Product Owner&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  2. Sprint Backlog 🗂️
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Set of tasks to be completed during the sprint&lt;/li&gt;
&lt;li&gt;Created during Sprint Planning and updated daily&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  3. Increment 📈
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Sum of all product backlog items completed during a sprint&lt;/li&gt;
&lt;li&gt;Reviewed during the Sprint Review ceremony&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;FYI&lt;/strong&gt;: There are additional extended artifacts in Scrum, such as the Definition of Done and Burn-Down Chart. For more information, check the further reading section.&lt;/p&gt;

&lt;h2&gt;
  
  
  Example 🏠
&lt;/h2&gt;

&lt;p&gt;Imagine building a house using &lt;code&gt;Scrum principles&lt;/code&gt;. You start by working with an architect (&lt;code&gt;Product Owner&lt;/code&gt;) to create a blueprint of your dream home. The architect prioritizes the features, such as the foundation, walls, roof, and interior design.&lt;/p&gt;

&lt;p&gt;The construction team (&lt;code&gt;Development Team&lt;/code&gt;) takes on a set of tasks for the first phase (&lt;code&gt;Sprint&lt;/code&gt;), such as building the foundation and framing the walls. They work together to complete the tasks, and at the end of the phase, they review their progress with you (&lt;code&gt;Sprint Review&lt;/code&gt;). You provide feedback, and the team adjusts their plan for the next phase.&lt;/p&gt;

&lt;p&gt;As the construction progresses, the team continues to work in phases, reviewing progress and making adjustments along the way. The architect ensures that the team is on track to meet the project timeline and budget. Finally, the team delivers a fully built and functional home (&lt;code&gt;Product Increment&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;This example illustrates how the Scrum framework can be applied to a complex project, with &lt;code&gt;iterative progress&lt;/code&gt;, &lt;code&gt;continuous feedback&lt;/code&gt;, and &lt;code&gt;flexibility&lt;/code&gt; to adapt to changing requirements.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqx4clyo82b4kgtno1oce.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqx4clyo82b4kgtno1oce.jpg" alt="Scrum Framework Example" width="800" height="512"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Advantages of Agile 🚀
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Flexibility and Adaptability&lt;/strong&gt; 🌟: Agile allows for changes at any stage of the project, making it ideal for projects with evolving requirements.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Customer Satisfaction&lt;/strong&gt; 😊: Continuous customer involvement ensures the final product meets their needs and expectations, leading to higher customer satisfaction.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Faster Delivery&lt;/strong&gt; 🚀: Frequent releases provide quick delivery of functional software, providing value to customers sooner.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Improved Quality&lt;/strong&gt; 🔍: Continuous testing, feedback, and refinement improve the overall quality of the product, reducing defects and bugs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Enhanced Collaboration&lt;/strong&gt; 🤝: Agile promotes cross-functional teams and encourages collaboration among team members, stakeholders, and customers, fostering a sense of ownership and teamwork.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Increased Transparency&lt;/strong&gt; 🔎: Agile's emphasis on regular progress updates and open communication ensures that stakeholders are informed and aligned throughout the project.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Risk Reduction&lt;/strong&gt; ⚠️: Agile's iterative approach helps identify and mitigate risks earlier in the project, reducing the likelihood of project failures.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Improved Team Morale&lt;/strong&gt; 💪: Agile's focus on teamwork, recognition, and continuous improvement boosts team morale and motivation, leading to a more productive and engaged team.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Popular Agile-Scrum Tools 🛠️
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.atlassian.com/software/jira" rel="noopener noreferrer"&gt;Jira by Atlassian&lt;/a&gt; - Agile project management tool&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.atlassian.com/software/confluence" rel="noopener noreferrer"&gt;Confluence by Atlassian - Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://trello.com/tour" rel="noopener noreferrer"&gt;Trello&lt;/a&gt; - Visual collaboration tool for planning tasks and projects&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Further Reading 📚
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.atlassian.com/agile" rel="noopener noreferrer"&gt;Atlassian: What is Agile?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.atlassian.com/agile/scrum" rel="noopener noreferrer"&gt;Atlassian: Scrum&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.atlassian.com/agile/advantage" rel="noopener noreferrer"&gt;Atlassian: Agile Advantage&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.atlassian.com/agile/kanban" rel="noopener noreferrer"&gt;Atlassian: Kanban&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.atlassian.com/agile/scrum/artifacts" rel="noopener noreferrer"&gt;Atlassian: Scrum Artifacts&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>sdlc</category>
      <category>agile</category>
      <category>projectmanagement</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>SDLC - Waterfall Model</title>
      <dc:creator>Sandeep Sangu</dc:creator>
      <pubDate>Mon, 22 Jul 2024 08:37:43 +0000</pubDate>
      <link>https://dev.to/sandeepsangu/sdlc-waterfall-model-ibc</link>
      <guid>https://dev.to/sandeepsangu/sdlc-waterfall-model-ibc</guid>
      <description>&lt;p&gt;The Waterfall model is a &lt;code&gt;linear&lt;/code&gt; and &lt;code&gt;sequential&lt;/code&gt; approach to software development where each phase must be completed before the next one begins. This means that each phase depends on the previous one, and making changes or revisions later can be difficult and costly.&lt;/p&gt;

&lt;h2&gt;
  
  
  Phases 📅
&lt;/h2&gt;

&lt;p&gt;The phases of the Waterfall model are the same as those in the SDLC, with a strong emphasis on their sequential nature.&lt;/p&gt;

&lt;h2&gt;
  
  
  Example 🍰
&lt;/h2&gt;

&lt;p&gt;Imagine ordering a custom cake. You first give the bakery your order (&lt;code&gt;requirements&lt;/code&gt;), then they design the cake (&lt;code&gt;design&lt;/code&gt;), followed by baking and decorating (&lt;code&gt;implementation&lt;/code&gt;), tasting and quality control (&lt;code&gt;testing&lt;/code&gt;), and finally, delivering the cake to you (&lt;code&gt;deployment&lt;/code&gt;). If you want to change the cake's flavor or design after it's been baked, it's too late and would require starting over from scratch.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffs3s8nad3bp3554gnr0w.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffs3s8nad3bp3554gnr0w.jpg" alt="Waterfall Model" width="780" height="664"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Advantages ✅
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Simplicity and Ease of Use&lt;/strong&gt;: The linear nature makes it straightforward.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Clear Milestones and Deliverables&lt;/strong&gt;: Each phase has specific goals and outputs.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Disadvantages ❌
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Inflexibility in Handling Changes&lt;/strong&gt;: Difficult to make changes once a phase is completed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Difficulty in Accommodating New Requirements&lt;/strong&gt;: New requirements are hard to integrate mid-process.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Further Reading 📚
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.atlassian.com/agile/project-management/waterfall-methodology" rel="noopener noreferrer"&gt;Waterfall Methodology on Atlassian&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>sdlc</category>
      <category>waterfallmodel</category>
      <category>lineardevelopment</category>
      <category>traditionalsdlc</category>
    </item>
    <item>
      <title>Software Development Life Cycle</title>
      <dc:creator>Sandeep Sangu</dc:creator>
      <pubDate>Mon, 22 Jul 2024 08:14:52 +0000</pubDate>
      <link>https://dev.to/sandeepsangu/software-development-life-cycle-4fdk</link>
      <guid>https://dev.to/sandeepsangu/software-development-life-cycle-4fdk</guid>
      <description>&lt;p&gt;The Software Development Life Cycle (SDLC) is a &lt;code&gt;structured process&lt;/code&gt; used for developing software applications. This methodical approach ensures that software is built efficiently and meets user requirements.&lt;/p&gt;

&lt;p&gt;SDLC typically involves a series of &lt;code&gt;phases&lt;/code&gt;, which I'll discuss below, to ensure that software is developed on time, within budget, and to the required quality standards.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why SDLC? 🤔
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;SDLC&lt;/code&gt; is essential in software development as it helps teams deliver high-quality software products on time, within budget, and with minimal errors. It provides a framework for managing and controlling the development process, ensuring that the final product meets the required standards and user expectations.&lt;/p&gt;

&lt;h2&gt;
  
  
  Phases of SDLC 📅
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;SDLC&lt;/code&gt; process consists of seven distinct &lt;code&gt;phases&lt;/code&gt; that help ensure software development is done efficiently and effectively.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foa5ls35dsw2n0d0knp7g.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foa5ls35dsw2n0d0knp7g.jpg" alt="SDLC Phases" width="800" height="268"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let's see what the phases in the Software Development Life Cycle (SDLC) are all about:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Planning 📝
&lt;/h3&gt;

&lt;p&gt;In this phase, we determine the project's goals, scope, and feasibility. This phase sets the foundation for the entire project, so it's crucial to get it right.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt; Project managers define the project objectives and decide whether the project is feasible.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Requirements Analysis 🔍
&lt;/h3&gt;

&lt;p&gt;Here, we gather and analyze user requirements to ensure the software will meet user needs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt; Business analysts gather detailed requirements from stakeholders and document them.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Design 🖌️
&lt;/h3&gt;

&lt;p&gt;This phase involves creating architectural and detailed designs. These designs serve as blueprints for the development team.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt; Architects and developers create system designs and detailed specifications.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Implementation (Coding) 💻
&lt;/h3&gt;

&lt;p&gt;Now, it's time to write and compile the code. Developers must adhere to the design specifications to ensure the code meets the required standards.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt; Developers start writing code based on the design documents.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Testing 🧪
&lt;/h3&gt;

&lt;p&gt;We verify that the software works as intended in this phase. This helps catch and fix any bugs or issues before deployment.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt; Testers run various tests to ensure the software is bug-free and meets requirements.&lt;/p&gt;

&lt;h3&gt;
  
  
  6. Deployment 🚀
&lt;/h3&gt;

&lt;p&gt;Deploying the software to the production environment happens here. This makes the software available for users.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt; The software is deployed to production and made available to users.&lt;/p&gt;

&lt;h3&gt;
  
  
  7. Maintenance 🔧
&lt;/h3&gt;

&lt;p&gt;Finally, we perform updates and bug fixes post-deployment. This ensures the software continues to function properly and remains up-to-date.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt; Ongoing maintenance and support ensure the software continues to function properly.&lt;/p&gt;

&lt;h2&gt;
  
  
  Further Reading 📚
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://aws.amazon.com/what-is/sdlc/" rel="noopener noreferrer"&gt;AWS: What is SDLC?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.atlassian.com/software-development" rel="noopener noreferrer"&gt;Atlassian: Software Development&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>sdlc</category>
      <category>sdlcmethodologies</category>
      <category>projectmanagement</category>
      <category>softwareengineering</category>
    </item>
    <item>
      <title>Unlocking Efficiency: CI/CD</title>
      <dc:creator>Sandeep Sangu</dc:creator>
      <pubDate>Fri, 19 Jul 2024 12:50:48 +0000</pubDate>
      <link>https://dev.to/sandeepsangu/unlocking-efficiency-cicd-2hc3</link>
      <guid>https://dev.to/sandeepsangu/unlocking-efficiency-cicd-2hc3</guid>
      <description>&lt;p&gt;Hello, everyone! 👋&lt;/p&gt;

&lt;p&gt;In the fast-paced world of software development, speed and quality are crucial. &lt;code&gt;Continuous Integration (CI)&lt;/code&gt; and &lt;code&gt;Continuous Delivery (CD)&lt;/code&gt; are two practices that have revolutionized the way teams work together to deliver high-quality software products. In this post, we'll explore the definitions, benefits, and some of the best practices of CI/CD, as well as introduce some popular tools that can help you get started.&lt;/p&gt;

&lt;h2&gt;
  
  
  🤖 Continuous Integration (CI)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt; &lt;code&gt;Continuous Integration&lt;/code&gt; is a software development practice where team members integrate their work frequently, usually at least daily, leading to multiple integrations per day.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Goal:&lt;/strong&gt; Ensure that the software is working correctly and catch errors early in the development cycle.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key Activities:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🧪 Write and run automated tests&lt;/li&gt;
&lt;li&gt;🛠️ Build the software&lt;/li&gt;
&lt;li&gt;📂 Integrate code changes into a central repository&lt;/li&gt;
&lt;li&gt;✔️ Run automated tests to validate the build&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🚀 Continuous Deployment (CD)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt; &lt;code&gt;Continuous Deployment&lt;/code&gt; is the practice of automatically building, testing, and deploying code changes to production after they pass automated tests.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Goal:&lt;/strong&gt; Ensure that code changes are quickly and safely deployed to production, allowing for faster time-to-market and reduced risk.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key Activities:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🔧 Automatically build and test code changes&lt;/li&gt;
&lt;li&gt;📦 Deploy code changes to production if tests pass&lt;/li&gt;
&lt;li&gt;🔍 Monitor production for errors or issues&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🏭 Continuous Delivery (CD)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt; &lt;code&gt;Continuous Delivery&lt;/code&gt; is the practice of building, testing, and preparing code changes for release to production, allowing for quick and safe deployment at any time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Goal:&lt;/strong&gt; Ensure that code changes are ready for release to production at any time, and can be deployed quickly and safely.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key Activities:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🛠️ Build and test code changes&lt;/li&gt;
&lt;li&gt;📦 Prepare code changes for release to production&lt;/li&gt;
&lt;li&gt;🚀 Release code changes to production manually or automatically&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🎉 Benefits of CI/CD
&lt;/h2&gt;

&lt;p&gt;🏁 Here are some of the benefits of implementing CI/CD:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Faster Time-to-Market ⏱️:&lt;/strong&gt; CI/CD helps teams to deliver software products faster, allowing them to stay ahead of the competition.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Improved Quality 💯:&lt;/strong&gt; CI/CD ensures that code changes are thoroughly tested, reducing the likelihood of errors and bugs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reduced Risk 🚨:&lt;/strong&gt; CI/CD helps teams to identify and fix errors early, reducing the risk of downstream problems.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Increased Efficiency 💪:&lt;/strong&gt; CI/CD automates repetitive tasks, freeing up teams to focus on more important tasks.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🌟 Best Practices for CI/CD
&lt;/h2&gt;

&lt;p&gt;Here are some of the best practices for implementing CI/CD in your project:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Automate Everything 🤖:&lt;/strong&gt; Automate as much of the build, test, and deployment process as possible.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use Version Control 🗂️:&lt;/strong&gt; Utilize version control systems like Git to track code changes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Test Thoroughly 🧪:&lt;/strong&gt; Write comprehensive tests to ensure that code changes are thoroughly tested.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Monitor and Analyze 📈:&lt;/strong&gt; Continuously monitor and analyze the performance of your CI/CD pipeline to identify areas for improvement.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🛠️ CI/CD Tools
&lt;/h2&gt;

&lt;p&gt;Here are some popular tools to help you implement CI/CD in your projects:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Jenkins 🤖:&lt;/strong&gt; An open-source automation server that helps teams automate the build, test, and deployment of code changes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Travis CI 🚀:&lt;/strong&gt; A hosted continuous integration service that helps teams automate the build and test of code changes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CircleCI 🌈:&lt;/strong&gt; A cloud-based platform that helps teams automate the build, test, and deployment of code changes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub Actions 🦸‍♂️:&lt;/strong&gt; Integrated with GitHub repositories, it allows you to automate workflows, including CI/CD, directly from your repository.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitLab CI/CD 🦊:&lt;/strong&gt; Part of GitLab, it provides a complete CI/CD pipeline solution integrated with GitLab's version control.&lt;/li&gt;
&lt;/ul&gt;




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

&lt;p&gt;Thanks for reading! If you found this post helpful, please share it with your network. If you have any questions or thoughts about CI/CD, feel free to share them in the comments below.&lt;/p&gt;

&lt;p&gt;By breaking down complex concepts into smaller chunks and using relatable examples, I hope to have made it easier for you to understand and learn about &lt;code&gt;Continuous Integration&lt;/code&gt;, &lt;code&gt;Continuous Deployment&lt;/code&gt;, and &lt;code&gt;Continuous Delivery&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  📚 References for Further Reading
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://about.gitlab.com/topics/ci-cd/" rel="noopener noreferrer"&gt;GitLab CI/CD&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.servicenow.com/products/devops/what-is-cicd.html" rel="noopener noreferrer"&gt;ServiceNow: What is CI/CD?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.redhat.com/en/topics/devops/what-is-ci-cd" rel="noopener noreferrer"&gt;Red Hat: What is CI/CD?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.atlassian.com/continuous-delivery/principles/continuous-integration-vs-delivery-vs-deployment" rel="noopener noreferrer"&gt;Atlassian: Continuous Integration vs. Delivery vs. Deployment&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Happy learning, and I wish you all the best in your journey! 📘✨&lt;/p&gt;

</description>
      <category>cicd</category>
      <category>devops</category>
      <category>softwaredevelopment</category>
      <category>automation</category>
    </item>
    <item>
      <title>Understanding CI/CD</title>
      <dc:creator>Sandeep Sangu</dc:creator>
      <pubDate>Fri, 19 Jul 2024 12:50:30 +0000</pubDate>
      <link>https://dev.to/sandeepsangu/understanding-cicd-3b2n</link>
      <guid>https://dev.to/sandeepsangu/understanding-cicd-3b2n</guid>
      <description>&lt;h2&gt;
  
  
  🚀 Understanding CI/CD: Continuous Integration &amp;amp; Continuous Deployment
&lt;/h2&gt;

&lt;p&gt;Hello, everyone! 👋&lt;/p&gt;

&lt;p&gt;Today, I'm sharing a simplified guide to CI/CD, covering the essentials of &lt;code&gt;Continuous Integration&lt;/code&gt; and &lt;code&gt;Continuous Deployment&lt;/code&gt;. But, there's more to CD than meets the eye - we'll also touch on the often-overlooked aspect of &lt;code&gt;Continuous Delivery&lt;/code&gt;. Whether you're new to the concept or looking to brush up, this post will help you understand CI/CD in an easy-to-grasp way. Let's get started! 🌟&lt;/p&gt;

&lt;h2&gt;
  
  
  🤖 Continuous Integration (CI)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Imagine a Library 📚:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Multiple authors (&lt;code&gt;developers&lt;/code&gt;) write books (&lt;code&gt;code&lt;/code&gt;) and submit them to the library (&lt;code&gt;repository&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;A librarian (&lt;code&gt;CI tool&lt;/code&gt;) collects all the books, checks for errors, and ensures they are properly formatted.&lt;/li&gt;
&lt;li&gt;If a book has errors, the librarian sends it back to the author for corrections.&lt;/li&gt;
&lt;li&gt;Once all books are error-free, the librarian creates a master copy (&lt;code&gt;build&lt;/code&gt;) and stores it in the library.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Key Takeaway:&lt;/strong&gt; &lt;code&gt;CI&lt;/code&gt; ensures that individual code changes are integrated into a central repository, and automated processes verify that the code is correct and functional.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxtr3n04753pvvrmlblf6.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxtr3n04753pvvrmlblf6.jpg" alt="Continuous Integration" width="800" height="703"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🚀 Continuous Deployment (CD)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Imagine a Restaurant 🍽️:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Chefs (&lt;code&gt;developers&lt;/code&gt;) prepare dishes (&lt;code&gt;code&lt;/code&gt;) and pass them to the kitchen staff (&lt;code&gt;CD tool&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;The kitchen staff checks the dishes for quality and presentation and then serves them directly to customers (&lt;code&gt;production&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;If a dish is not up to standard, the kitchen staff sends it back to the chef for rework.&lt;/li&gt;
&lt;li&gt;Once a dish is approved, it's immediately served to customers.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Key Takeaway:&lt;/strong&gt; &lt;code&gt;CD&lt;/code&gt; automates the deployment of code changes to production, ensuring that only validated and tested code reaches the end-users.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk84k7l1x4a8kt0drmt3c.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk84k7l1x4a8kt0drmt3c.jpg" alt="Continuous Deployment" width="800" height="503"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🏭 Continuous Delivery (CD)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Imagine a Factory 🏭:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Workers (&lt;code&gt;developers&lt;/code&gt;) build components (&lt;code&gt;code&lt;/code&gt;) and pass them to the quality control team (&lt;code&gt;CD tool&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;The quality control team checks the components, assembles them into a final product, and packages it for delivery.&lt;/li&gt;
&lt;li&gt;The packaged product is then stored in a warehouse (&lt;code&gt;repository&lt;/code&gt;) until it's ready to be shipped to customers (&lt;code&gt;production&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;When the product is shipped, the factory receives feedback from customers, which is used to improve the production process.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F08vkyc2xz1qvzlke4gsr.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F08vkyc2xz1qvzlke4gsr.jpg" alt="Continuous Delivery" width="800" height="483"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key Takeaway:&lt;/strong&gt; &lt;code&gt;CD&lt;/code&gt; ensures that code changes are built, tested, and packaged into a releasable product, which can be deployed to production at any time. It's a bridge between CI and CD.&lt;/p&gt;




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

&lt;p&gt;I hope these analogies have helped you understand the basics of &lt;code&gt;CI/CD&lt;/code&gt;. My goal is to make complex concepts simple and easy to grasp. 😊&lt;/p&gt;

&lt;p&gt;Thanks for reading! If you found this post helpful, please share it with your network. If you have any questions or thoughts about CI/CD, feel free to share them in the comments below. Happy learning! 👨‍💻👩‍💻&lt;/p&gt;

&lt;p&gt;Now that we've explored the world of &lt;code&gt;CI/CD&lt;/code&gt; through analogies, you should have a solid grasp of what these concepts entail.&lt;/p&gt;

&lt;p&gt;In the next post, let's dive into the actual definitions, &lt;code&gt;benefits&lt;/code&gt;, and &lt;code&gt;best practices&lt;/code&gt; of CI/CD.&lt;/p&gt;

&lt;p&gt;I'll also introduce some popular CI/CD tools. Stay tuned! 📘🔧✨&lt;/p&gt;

</description>
      <category>cicd</category>
      <category>devops</category>
      <category>softwaredevelopment</category>
      <category>automation</category>
    </item>
    <item>
      <title>Part 2: Activating the Event Relay in Salesforce and AWS</title>
      <dc:creator>Sandeep Sangu</dc:creator>
      <pubDate>Sun, 18 Feb 2024 12:44:06 +0000</pubDate>
      <link>https://dev.to/sandeepsangu/part-2-activating-the-event-relay-in-salesforce-and-aws-1984</link>
      <guid>https://dev.to/sandeepsangu/part-2-activating-the-event-relay-in-salesforce-and-aws-1984</guid>
      <description>&lt;p&gt;Welcome back to our event-driven journey with Salesforce and AWS. This chapter focuses on activating the Salesforce Event Relay and connecting it with Amazon EventBridge, a key step to achieving a seamless data flow and leveraging the full capabilities of our integrated setup.&lt;/p&gt;

&lt;p&gt;Taking a streamlined approach, we'll utilize the straightforward instructions from the official Salesforce documentation, ensuring clarity and direct access to essential steps without unecessary elaboration.&lt;/p&gt;

&lt;p&gt;Let's continue our adventure, where we'll activate the Partner Event Source in Amazon EventBridge and kick-start the event relay in Salesforce. Ready for the next leap? Let's dive in.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Initial Setup:&lt;/strong&gt; Begin by ensuring you are logged into both your Salesforce and AWS free tier consoles. This foundational step is crucial for the tasks ahead.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Before Activating:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa4sgtq3mg2j5s3aoxw2p.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa4sgtq3mg2j5s3aoxw2p.jpg" alt="Before associating the event bus" width="800" height="265"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In acknowledgment of Salesforce’s detailed documentation, I recommend consulting their official guide to activate the Partner Event Source in Amazon EventBridge. Visit &lt;a href="https://help.salesforce.com/s/articleView?id=sf.ev_relay_activate_eventbridge_bus.htm&amp;amp;type=5" rel="noopener noreferrer"&gt;Activate the Partner Event Source in Amazon EventBridge&lt;/a&gt; for comprehensive steps on completing the setup, including the event bus association. Successfully doing so will change the event source status to &lt;code&gt;Active&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Following the association of the partner event source with the event bus, your setup should resemble the snapshot below:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjq4n5mrzdehrxl1lq5im.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjq4n5mrzdehrxl1lq5im.jpg" alt="After associating the partner event source with the event bus" width="800" height="194"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Continuing with the momentum, initiating the event relay is our next objective. Salesforce offers clear instructions that facilitate this process effortlessly. For a step-by-step guide, consult &lt;a href="https://help.salesforce.com/s/articleView?id=sf.ev_relay_start_ui.htm&amp;amp;type=5" rel="noopener noreferrer"&gt;Start the Event Relay&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo58i559dfr46935nzrf3.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo58i559dfr46935nzrf3.jpg" alt="After starting the event relay" width="800" height="222"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Completing these tasks marks a significant milestone in our journey, successfully concluding the initial half of our adventure.&lt;/p&gt;

&lt;h2&gt;
  
  
  Setting Up Our Log Group 📝
&lt;/h2&gt;

&lt;p&gt;Let's quickly set up a log group in AWS CloudWatch. This log group will play a crucial role later on. I’ve named mine &lt;code&gt;SF-Employee-CDC-Logs&lt;/code&gt; as a nod to its purpose. For this demo, I named it with a specific focus. I encourage you to choose a name that aligns with your setup, capturing the essence of your demo.&lt;/p&gt;

&lt;h2&gt;
  
  
  EventBridge Rule
&lt;/h2&gt;

&lt;p&gt;As we delve deeper into integrating Salesforce with AWS, our next pivotal task is to establish an EventBridge rule 🛠️. This rule is designed to capture events from any Salesforce custom object enabled for Change Data Capture (CDC), relaying them through our configured AWS partner event source and into the CloudWatch log group we've prepared.&lt;/p&gt;

&lt;p&gt;Salesforce's documentation offers a clear, step-by-step guide for both setting up this EventBridge rule and ensuring it's correctly linked to the event bus and the designated log group. For comprehensive instructions on configuring the rule to capture and store events as intended, please refer to &lt;a href="https://help.salesforce.com/s/articleView?id=sf.ev_relay_verify_connection.htm&amp;amp;type=5" rel="noopener noreferrer"&gt;Create an EventBridge Rule for Logging Events in a CloudWatch Log&lt;/a&gt;. This resource provides all the details you need to successfully navigate this critical step, ensuring a seamless flow of data within our integrated cloud environment.&lt;/p&gt;

&lt;p&gt;In customizing our integration, I've assigned the rule a specific identifier, &lt;code&gt;SF-CDC-EmployeeChange-Rule&lt;/code&gt;, to clearly reflect its function. Feel inspired to select a name that aligns with what you’ve established so far in this demo, truly making it your own.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Adding a Personal Touch from Step 6 Onwards:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Following Salesforce's guide closely until step 5 was helpful, but from step 6, I introduced some personal tweaks to better fit our scenario:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Event Source:&lt;/strong&gt; Select &lt;code&gt;Others&lt;/code&gt; to broaden our event capture scope.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sample Event:&lt;/strong&gt; Skipping this is optional, though it may simplify your setup.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Creation Method:&lt;/strong&gt; Use the &lt;code&gt;Custom pattern&lt;/code&gt; option in the JSON editor for more control.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Event Pattern:&lt;/strong&gt; Craft your event capture criteria with this JSON structure:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "source": ["aws.partner/salesforce.com/xxxxxxxxxxxxxxxxA0/0YLIS000000KyjB4AS"],
  "detail-type": ["Employee__ChangeEvent"]
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;⚠️ &lt;strong&gt;Important Note:&lt;/strong&gt; The ID in the event source is intentionally obscured for privacy. Please ensure you substitute this with the complete ID of your event bus, which was generated when you associated/activated the partner event source.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8q9jo89sobd57yy9pq58.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8q9jo89sobd57yy9pq58.jpg" alt="Event Pattern" width="800" height="183"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Continue by clicking 'Next', guiding you to the 'Select target(s)' page:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Target 1:&lt;/strong&gt; Within the AWS Service section, select &lt;code&gt;CloudWatch log group&lt;/code&gt; from the dropdown.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Log Group:&lt;/strong&gt; Enter the name of the log group you created earlier, &lt;code&gt;SF-Employee-CDC-Logs&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Upon successfully configuring your rule, inspecting your event bus will display a setup similar to what's illustrated below, confirming that your configuration is on point and operational:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frpu27p2xm0e7wxd5vixj.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frpu27p2xm0e7wxd5vixj.jpg" alt="Target Screenshot" width="800" height="464"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fix5r16u4d0p5bh4tjz16.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fix5r16u4d0p5bh4tjz16.jpg" alt="Event Bus and Rule Gist" width="800" height="433"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And just like that, we're almost at the finish line 🏁! The last piece of our setup puzzle is to enable CDC on our custom object. Let's dive into that:&lt;/p&gt;

&lt;p&gt;From the Setup page in Salesforce, use the quick find box to search for &lt;code&gt;Change Data Capture.&lt;/code&gt; You'll see a page similar to what's shown below. From the available entities, type in the name of the custom object you created, select it, and use the arrow to move it from the available to the selected entities, then click on "Save."&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0t02fnceg4e7m5x3i4xb.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0t02fnceg4e7m5x3i4xb.jpg" alt="CDC Enabled on Custom Object" width="800" height="402"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🎉 &lt;strong&gt;Voila!&lt;/strong&gt; We've now wrapped up the essential setup, ready to witness our creation spring into action.&lt;/p&gt;

&lt;p&gt;Before we proceed, let's do a quick recap ⚡ of what we've accomplished in Part 1 and Part 2:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;AWS and Salesforce Setup:&lt;/strong&gt; Checked and done!&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Within Salesforce:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Crafted a custom object and populated it with sample records.&lt;/li&gt;
&lt;li&gt;Set up Named Credentials and CORS with the required URLs of Postman in the allowed origin list.&lt;/li&gt;
&lt;li&gt;Created a channel for a change event using Postman, and added a channel member.&lt;/li&gt;
&lt;li&gt;Ended Part 1 by setting up the event relay.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;&lt;strong&gt;In Part 2, focusing on AWS:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Navigated to AWS and activated the partner event source by selecting it and clicking on "Associate with event bus," then confirmed that the status is "Active."&lt;/li&gt;
&lt;li&gt;Created a log group in AWS CloudWatch.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;&lt;strong&gt;Back in Salesforce to wrap up:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Changed the status of the Event Relay from "Stopped" to "Running."&lt;/li&gt;
&lt;li&gt;Enabled CDC on the custom object to catch those changes.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;With our setup complete, what's next on the horizon? 🌅&lt;/p&gt;

&lt;h2&gt;
  
  
  Coming Up in Part 3: Visualization with Grafana
&lt;/h2&gt;

&lt;p&gt;In our grand finale, we'll turn raw data into visual insights. We'll guide you through integrating CloudWatch logs with Grafana and setting up dashboards that vividly display our event data. Get ready for a visual feast as we explore Create, Delete, and Update operations, tracing the journey of events to our log group, and finally, to Grafana for the ultimate visualization.&lt;/p&gt;

&lt;p&gt;Stay tuned for the thrilling conclusion of our series, where data meets design! 📊🎨&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Disclaimer:&lt;/strong&gt; This series is based on my personal experiences and insights gained from various resources and documentation. The aim is to share knowledge and foster learning within the community. Any resemblance to other materials is coincidental, and I acknowledge the contributions of the broader tech community in advancing our understanding of these topics.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;#CommunityContributions&lt;/code&gt;&lt;/p&gt;

</description>
      <category>aws</category>
      <category>salesforce</category>
      <category>eventdrivenarchitecture</category>
      <category>integration</category>
    </item>
  </channel>
</rss>
