<?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: Tejas H</title>
    <description>The latest articles on DEV Community by Tejas H (@tejas_h_blitz).</description>
    <link>https://dev.to/tejas_h_blitz</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3186345%2F37fe4f7e-481b-4b0e-8ac0-4ec7e6b8ca83.png</url>
      <title>DEV Community: Tejas H</title>
      <link>https://dev.to/tejas_h_blitz</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/tejas_h_blitz"/>
    <language>en</language>
    <item>
      <title>Building ED-DRLE: A Distributed Reservation Ledger, and What I Got Wrong Before I Got It Right</title>
      <dc:creator>Tejas H</dc:creator>
      <pubDate>Mon, 07 Sep 2026 17:23:35 +0000</pubDate>
      <link>https://dev.to/tejas_h_blitz/building-ed-drle-a-distributed-reservation-ledger-and-what-i-got-wrong-before-i-got-it-right-4ip6</link>
      <guid>https://dev.to/tejas_h_blitz/building-ed-drle-a-distributed-reservation-ledger-and-what-i-got-wrong-before-i-got-it-right-4ip6</guid>
      <description>&lt;p&gt;Reservation systems look deceptively simple on the surface—check availability, hold a slot, and confirm a booking. But underneath, they're one of the more honest tests of distributed systems thinking: multiple services need to agree on state, failures happen mid-transaction, and "just use a database lock" stops working the moment you scale past a single node.&lt;/p&gt;

&lt;p&gt;ED-DRLE (Distributed Reservation Ledger) is my attempt to build that system properly—not as a toy CRUD app with a reservations table, but as a system that survives partial failure, avoids double-booking under load, and is honest about where it still falls short.&lt;/p&gt;

&lt;p&gt;This post walks through the architecture, the trade-offs, and—just as importantly—the gaps I found in my own design when I held it up against a real target load.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Core Problem:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A reservation isn't a single write. It's a sequence: check availability → hold the resource → charge or confirm → finalize. If any step fails partway, you can't just roll back with a database transaction, because the steps span multiple services and, in a real system, multiple data stores.&lt;/p&gt;

&lt;p&gt;This is the classic distributed transaction problem, and it's why ED-DRLE is built around the Saga pattern instead of two-phase commit.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why Saga Over 2PC:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Two-phase commit gives you strong consistency, but it does so by holding locks across services until every participant agrees to commit—which means one slow or failed service blocks everyone else. For a reservation system under real traffic, that's a latency and availability risk I wasn't willing to take on.&lt;/p&gt;

&lt;p&gt;Sagas trade strict atomicity for a sequence of local transactions, each with a defined compensating action if a later step fails. If a hold succeeds but the confirmation step fails, the system runs a compensating transaction to release the hold—instead of everyone waiting on a coordinator.&lt;/p&gt;

&lt;p&gt;I used AWS Step Functions to orchestrate the saga steps explicitly, rather than hand-rolling a choreography-based saga with event chains. This made the failure paths visible and testable as a state machine, rather than implicit in a web of service-to-service events.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Storage: Redis-to-DynamoDB Tiering&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Reservation holds are short-lived and high-frequency—perfect for an in-memory store, but not something you want as your durable source of truth. ED-DRLE uses a tiered persistence model:&lt;/p&gt;

&lt;p&gt;Redis holds active reservation locks and short-TTL holds, optimized for fast reads/writes under contention.&lt;br&gt;
DynamoDB persists confirmed reservations durably, once a hold survives the saga's confirmation step.&lt;/p&gt;

&lt;p&gt;This keeps the hot path fast without giving up durability for the state that actually matters long-term.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Protecting the System Under Load:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Two mechanisms sit in front of the core reservation logic:&lt;/p&gt;

&lt;p&gt;Token-bucket rate limiting, to prevent a burst of requests for the same resource from overwhelming the hold logic&lt;br&gt;
A circuit breaker, so that if a downstream dependency (e.g., the confirmation service) starts failing, the system stops hammering it and fails fast instead of piling up retries&lt;/p&gt;

&lt;p&gt;Neither of these is exotic, but both are the difference between a system that degrades gracefully and one that falls over in a cascading failure.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What the Numbers Actually Say:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I load-tested ED-DRLE at 229 RPS, with a p95 latency of 315 ms. I'm stating these numbers plainly rather than rounding them up or extrapolating to a bigger number, because the honest baseline is more useful—to me and to anyone reading this—than an inflated one.&lt;/p&gt;

&lt;p&gt;That number matters because I evaluated it against a 10,000 RPS target I set for the system's design, and it's not close yet. That gap is the most useful part of this project, not the part I'd normally put in a portfolio blurb.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Where the System Still Has Gaps:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I analyzed the design against that 10,000 RPS target, deliberately looking for what would break, rather than assuming the architecture was sound because it worked at moderate load. Four gaps stood out:&lt;/p&gt;

&lt;p&gt;No expiry reconciliation between Redis and DynamoDB. If a Redis hold expires but the corresponding DynamoDB state isn't reconciled, the two stores can drift out of sync—a real correctness risk, not just a performance one.&lt;br&gt;
Non-idempotent compensating transactions. Saga compensations need to be safely retryable. Right now, a retried compensation isn't guaranteed to be a no-op if it's already been applied, which risks double-compensating (e.g., releasing a hold twice).&lt;br&gt;
No RDS proxy in front of the relational layer. At higher connection volumes, this becomes a real bottleneck—connection exhaustion under a traffic spike is a predictable failure mode without it.&lt;br&gt;
An unbounded Redis set. Without a cap or eviction policy, this is a slow-building memory risk under sustained load—the kind of thing that looks fine in a load test and fails quietly in production weeks later.&lt;/p&gt;

&lt;p&gt;None of these are hidden in the codebase—they're the direct output of stress-testing the design against a target an order of magnitude higher than what I've actually measured.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why I'm Writing This Instead of Just Shipping It&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It would be easy to describe ED-DRLE as "a distributed reservation system built with Saga orchestration, Redis, and DynamoDB" and leave it there. But the more useful engineering story is the second half: what happens when you take your own architecture seriously enough to look for where it breaks.&lt;/p&gt;

&lt;p&gt;229 RPS at p95 315 ms is a real, measured number—not a projection, not a "should scale to." And the four gaps above are the actual next milestones for this project, not a hidden list I'm keeping to myself.&lt;/p&gt;

&lt;p&gt;If you're working on anything with a similar shape—sagas, tiered storage, rate limiting under real load—I'd genuinely like to compare notes on where your design held up and where it didn't.&lt;/p&gt;

&lt;p&gt;GitHub-&lt;a href="https://github.com/Tejas-h-blitz/Aws-Distributed-Reservation-Ledger" rel="noopener noreferrer"&gt;https://github.com/Tejas-h-blitz/Aws-Distributed-Reservation-Ledger&lt;/a&gt;&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>backend</category>
      <category>scalability</category>
      <category>systemdesign</category>
    </item>
    <item>
      <title>Solo Build Challenge: How I Built Beacon AI for HACKHAZARDS '26</title>
      <dc:creator>Tejas H</dc:creator>
      <pubDate>Wed, 17 Jun 2026 15:04:25 +0000</pubDate>
      <link>https://dev.to/tejas_h_blitz/solo-build-challenge-how-i-built-beacon-ai-for-hackhazards-26-23e</link>
      <guid>https://dev.to/tejas_h_blitz/solo-build-challenge-how-i-built-beacon-ai-for-hackhazards-26-23e</guid>
      <description>&lt;p&gt;When preparing for placements and technical interviews, most students face a major roadblock: generic AI tools give flat advice, and mock interviews with real people are hard to schedule.&lt;br&gt;
To solve this, I decided to join HACKHAZARDS '26 as a solo developer and build Beacon AI—a complete, full-stack AI career ecosystem designed to help students bridge the gap between college and their dream tech roles.&lt;/p&gt;

&lt;p&gt;🚀 The Core Features I Shipped&lt;br&gt;
Instead of creating a simple chatbot wrapper, I engineered three distinct functional modules entirely on my own:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Interactive AI Interview Coach:&lt;/strong&gt; A real-time simulator where users answer technical questions and get instant, structured feedback on their performance.&lt;br&gt;
&lt;strong&gt;Skill Gap Analytics Dashboard:&lt;/strong&gt; A visual interface that tracks user progress, highlights weak areas, and points out missing skills for specific industry roles.&lt;br&gt;
&lt;strong&gt;Automated Resume Builder:&lt;/strong&gt; A structured tool that helps users organize their professional details and checks if their background matches current market standards.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🛠️ My Technology Stack&lt;/strong&gt;&lt;br&gt;
To ensure the application runs fast and manages user data properly, I chose a decoupled, full-stack architecture:&lt;br&gt;
&lt;strong&gt;Frontend &amp;amp; Server Layers:&lt;/strong&gt; Built with Next.js (App Router) and styled using Tailwind CSS and Shadcn UI for a clean, professional user experience.&lt;br&gt;
&lt;strong&gt;Database Persistence:&lt;/strong&gt; I integrated Prisma ORM connected to a relational database to keep user metrics, scores, and historical profiles completely active.&lt;br&gt;
&lt;strong&gt;AI Microservice Backend:&lt;/strong&gt; A dedicated FastAPI (Python) server running LangChain and the Google Gemini API to handle structured prompt processing and smooth token generation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;📂 Project Architecture&lt;/strong&gt;&lt;br&gt;
To keep the codebase clean and ready for judge code reviews, I organized the repository into explicit folders:&lt;br&gt;
├── /app             # Next.js frontend pages and layouts&lt;br&gt;
├── /actions         # Server actions for database operations&lt;br&gt;
├── /python-backend  # FastAPI server for LangChain &amp;amp; Gemini AI&lt;br&gt;
├── /components      # Reusable UI elements via Shadcn UI&lt;br&gt;
├── /data            # Static data configurations (FAQs, guides)&lt;br&gt;
└── /lib             # Prisma Client setup and utilities&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;⚡ Challenges I Faced &amp;amp; My Solo Fixes&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Managing the Dual-Service Pipeline Alone
Building both a JavaScript frontend framework and a Python backend microservice simultaneously during a hackathon can get messy quickly.
The Fix: I carefully isolated the AI logic inside FastAPI. This allowed me to manage API requests efficiently and pass structured data back to the Next.js client using server actions without locking up the client interface.&lt;/li&gt;
&lt;li&gt;Ensuring Data Integrity Across Sessions
I wanted to ensure this felt like a real SaaS product, meaning data could not just vanish on a page refresh.
The Fix: I set up Prisma ORM early in the development cycle. Every mock interview score and skill assessment is written securely to the database, ensuring a user's progress history is completely saved.
**
🏁 Conclusion**
Taking on HACKHAZARDS '26 as a single solo developer was a massive challenge, but it pushed me to move away from simple prototypes and master a true production-ready stack.
The application is fully live and ready to run! &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Check out the project here:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🔗 Live Application:&lt;/strong&gt; &lt;a href="https://beacon-ai-blitz.vercel.app/" rel="noopener noreferrer"&gt;https://beacon-ai-blitz.vercel.app/&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;💻 GitHub Repository:&lt;/strong&gt; &lt;a href="https://github.com/Tejas-h-blitz/Beacon-AI" rel="noopener noreferrer"&gt;https://github.com/Tejas-h-blitz/Beacon-AI&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Built with ❤️ by a solo hacker for the Namespace Community.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>career</category>
      <category>interview</category>
      <category>showdev</category>
    </item>
  </channel>
</rss>
