<?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: Deepak Kumar Jha</title>
    <description>The latest articles on DEV Community by Deepak Kumar Jha (@build-with-deepak).</description>
    <link>https://dev.to/build-with-deepak</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%2F3690803%2Fb2cc4d8f-539f-4d5f-a3b7-e3b29850f0e8.jpg</url>
      <title>DEV Community: Deepak Kumar Jha</title>
      <link>https://dev.to/build-with-deepak</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/build-with-deepak"/>
    <language>en</language>
    <item>
      <title>Stop Polling, Start Reacting: Why Event-Driven Architecture Is Your Competitive Advantage</title>
      <dc:creator>Deepak Kumar Jha</dc:creator>
      <pubDate>Sat, 01 Aug 2026 13:44:55 +0000</pubDate>
      <link>https://dev.to/build-with-deepak/stop-polling-start-reacting-why-event-driven-architecture-is-your-competitive-advantage-16ml</link>
      <guid>https://dev.to/build-with-deepak/stop-polling-start-reacting-why-event-driven-architecture-is-your-competitive-advantage-16ml</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmedia.licdn.com%2Fdms%2Fimage%2Fv2%2FD5612AQEDxdwxqQnNHw%2Farticle-cover_image-shrink_600_2000%2FB56ZyTC4U.KoAU-%2F0%2F1771993532738" 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%2Fmedia.licdn.com%2Fdms%2Fimage%2Fv2%2FD5612AQEDxdwxqQnNHw%2Farticle-cover_image-shrink_600_2000%2FB56ZyTC4U.KoAU-%2F0%2F1771993532738" alt="Stop Polling, Start Reacting: Event-Driven Architecture" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Stop Polling, Start Reacting: Why Event-Driven Architecture Is Your Competitive Advantage
&lt;/h1&gt;

&lt;p&gt;There's a pattern I see in almost every backend I'm asked to review: &lt;strong&gt;polling&lt;/strong&gt;. The order service checks the payment service every 5 seconds: "Has the payment been confirmed?" The notification service queries the database every 10 seconds: "Are there new events?" The analytics dashboard refreshes every 30 seconds: "Is there new data?"&lt;/p&gt;

&lt;p&gt;Each individual polling call is cheap. But multiply it across every service, every user, every second — and you're generating millions of unnecessary requests per day. Your database is spending more time answering "no, nothing has changed" than doing actual work.&lt;/p&gt;

&lt;p&gt;This is the problem Event-Driven Architecture solves.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Event-Driven Architecture Actually Means
&lt;/h2&gt;

&lt;p&gt;The concept is simple. Instead of services constantly asking each other "did anything happen?", each service &lt;strong&gt;announces&lt;/strong&gt; when something happens, and other services &lt;strong&gt;listen&lt;/strong&gt; for announcements they care about.&lt;/p&gt;

&lt;p&gt;When a user places an order, the Order Service publishes an event: &lt;code&gt;Order Created&lt;/code&gt;. The Payment Service hears this and processes the payment. When payment succeeds, it publishes: &lt;code&gt;Payment Confirmed&lt;/code&gt;. The Inventory Service reserves the stock. The Notification Service sends the confirmation email. The Analytics Service updates the dashboard.&lt;/p&gt;

&lt;p&gt;No service is asking anyone anything. No service needs to know which other services exist. Each service does its job and announces the result.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why This Matters for Your Business
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Speed to Market
&lt;/h3&gt;

&lt;p&gt;In a polling-based system, adding "send an SMS when a payment fails" requires modifying the payment service to call the SMS service. In an event-driven system, you build a new SMS service that listens for &lt;code&gt;Payment Failed&lt;/code&gt; events. The payment service doesn't change at all.&lt;/p&gt;

&lt;p&gt;I've seen this pattern reduce the time to add new integrations from &lt;strong&gt;2-3 weeks to 2-3 days&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Resilience and Fault Tolerance
&lt;/h3&gt;

&lt;p&gt;If the notification service goes down in a synchronous architecture, the order might fail. In an event-driven architecture, if the notification service goes down, the events wait in the message queue. When it comes back online, it processes the backlog. The user's order was never affected.&lt;/p&gt;

&lt;h3&gt;
  
  
  Horizontal Scaling
&lt;/h3&gt;

&lt;p&gt;If your order volume doubles, you add more consumer instances. The event broker distributes the load automatically. I've seen this support a &lt;strong&gt;10x traffic increase with minimal infrastructure changes&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Choosing the Right Event Backbone
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;For Most Startups (under 10,000 events/second):&lt;/strong&gt; Managed message queues — AWS SQS with SNS, Google Cloud Pub/Sub, or Azure Service Bus. Fully managed, no infrastructure to maintain.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;For High-Throughput Requirements:&lt;/strong&gt; Apache Kafka excels when you need massive throughput (100,000+ events/second), event replay, long-term storage, and stream processing. Always use managed Kafka services (AWS MSK, Confluent Cloud) unless you have a dedicated platform engineering team.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Hybrid Approach:&lt;/strong&gt; Use Kafka for critical business events requiring durability and ordering. Use simpler queues (SQS/RabbitMQ) for lightweight operational events like notifications and logging.&lt;/p&gt;

&lt;h2&gt;
  
  
  Common Pitfalls
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Event Spaghetti:&lt;/strong&gt; Maintain a central event registry with schemas, producers, and consumers documented. Treat event schemas like API contracts — version them and never make breaking changes without migration support.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Eventual Consistency Confusion:&lt;/strong&gt; Operations requiring immediate consistency (e.g., deducting a balance) should happen within a single service. Only the result (the event) is published asynchronously.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lost Events:&lt;/strong&gt; Configure your broker for at-least-once delivery. Design your consumers to be idempotent — processing the same event twice produces the same result as once.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting Started: The Incremental Approach
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Step 1:&lt;/strong&gt; Identify the highest-volume polling pattern in your current system. Convert it to event-based communication using a simple message queue. Measure the reduction in database load.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Step 2:&lt;/strong&gt; Identify the integration point causing the most deployment friction. Introduce events at this boundary.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Step 3:&lt;/strong&gt; As you extract services, make event-driven communication the default for inter-service communication.&lt;/li&gt;
&lt;/ol&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://www.linkedin.com/pulse/stop-polling-start-reacting-why-event-driven-architecture-deepak-jha-l7q5c/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>eventdrivenarchitecture</category>
      <category>apachekafka</category>
      <category>systemdesign</category>
      <category>distributedsystems</category>
    </item>
    <item>
      <title>The Real Cost of Quick Fixes: How Technical Shortcuts Become Business Debt</title>
      <dc:creator>Deepak Kumar Jha</dc:creator>
      <pubDate>Sat, 01 Aug 2026 13:38:26 +0000</pubDate>
      <link>https://dev.to/build-with-deepak/the-real-cost-of-quick-fixes-how-technical-shortcuts-become-business-debt-7ee</link>
      <guid>https://dev.to/build-with-deepak/the-real-cost-of-quick-fixes-how-technical-shortcuts-become-business-debt-7ee</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmedia.licdn.com%2Fdms%2Fimage%2Fv2%2FD5612AQEgUK2VCtE_ug%2Farticle-cover_image-shrink_720_1280%2FB56ZyTDUMdKwAI-%2F0%2F1771993646710" 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%2Fmedia.licdn.com%2Fdms%2Fimage%2Fv2%2FD5612AQEgUK2VCtE_ug%2Farticle-cover_image-shrink_720_1280%2FB56ZyTDUMdKwAI-%2F0%2F1771993646710" alt="The Real Cost of Quick Fixes" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  The Real Cost of "Quick Fixes": How Technical Shortcuts Become Business Debt
&lt;/h1&gt;

&lt;p&gt;A founder recently told me: "Our developers keep saying we have 'technical debt' and need to stop building features to fix it. But we have a product launch next quarter. I can't afford to stop."&lt;/p&gt;

&lt;p&gt;I told him: "You're not hearing a technical request. You're hearing a risk warning. And every month you ignore it, the risk compounds."&lt;/p&gt;

&lt;p&gt;The problem isn't technical debt itself. It's that nobody is translating it into the language the business actually uses: &lt;strong&gt;risk, cost, and velocity&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Technical Debt Actually Costs (In Business Terms)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  It Slows Down Feature Delivery
&lt;/h3&gt;

&lt;p&gt;In a codebase with high technical debt, feature delivery velocity is typically &lt;strong&gt;2-4x slower&lt;/strong&gt; than in a comparable clean codebase. That means your competitor — with the same team size and the same feature ideas — ships 2-4 times faster than you. Not because they have better engineers. Because their engineers aren't fighting the codebase.&lt;/p&gt;

&lt;h3&gt;
  
  
  It Increases Incident Frequency and Severity
&lt;/h3&gt;

&lt;p&gt;In one client's platform, a "quick fix" from two years ago had introduced a race condition in the checkout flow. Under normal traffic, it was invisible. During a promotional event that tripled traffic, the race condition triggered for approximately 2% of transactions — resulting in double charges.&lt;/p&gt;

&lt;p&gt;The incident took 14 hours to diagnose and fix. Quick fixes create hidden failure modes that surface at the worst possible time — during peak traffic, during a product launch, during a fundraising demo.&lt;/p&gt;

&lt;h3&gt;
  
  
  It Makes Hiring Harder (and More Expensive)
&lt;/h3&gt;

&lt;p&gt;Strong senior engineers can assess a codebase within the first week. If they see extensive tech debt, many will leave during the probation period. One company I worked with hired 5 senior backend developers — three left within 3 months citing "unmaintainable codebase." The cost of recruiting, onboarding, and losing those three engineers exceeded $100,000.&lt;/p&gt;

&lt;h3&gt;
  
  
  It Blocks Strategic Initiatives
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Want to add AI features? Your data layer may be too tangled to feed structured data into a RAG pipeline.&lt;/li&gt;
&lt;li&gt;Want to expand to a new market? Your auth logic scattered across 15 files makes compliance changes a minefield.&lt;/li&gt;
&lt;li&gt;Want to raise a Series B? Technical due diligence will assess your codebase — significant technical debt directly reduces your valuation.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Framework: Translating Debt into Business Risk
&lt;/h2&gt;

&lt;p&gt;When I work with leadership teams, I present technical debt in a format they can evaluate alongside other business risks:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Velocity Drag:&lt;/strong&gt; "Our current tech debt is reducing feature delivery speed by an estimated 40%. The 6 features planned for Q2 will likely take until Q3. If we invest 4 weeks in targeted debt reduction now, we recover most of that velocity."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Incident Probability:&lt;/strong&gt; "We have 3 known areas of fragile code in the payment and user authentication flows. Based on the last 6 months, there's a meaningful likelihood of a production incident. The estimated cost ranges from $15,000 to $50,000 depending on severity."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hiring and Retention Risk:&lt;/strong&gt; "Our last 2 senior hires cited codebase quality as a concern during exit interviews. We're spending roughly $25,000 per senior hire in recruitment costs. If codebase quality continues to be a retention issue, we're likely to see $50,000-100,000 in annual recruitment waste."&lt;/p&gt;

&lt;h2&gt;
  
  
  The Pragmatic Approach: The 20% Rule
&lt;/h2&gt;

&lt;p&gt;I don't advocate for "tech debt sprints" where the team stops building features. Instead, I implement the &lt;strong&gt;20% Rule&lt;/strong&gt;: every sprint, 20% of engineering capacity is allocated to debt reduction. This is not negotiable and not deferred when deadlines are tight.&lt;/p&gt;

&lt;p&gt;How it works:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Prioritize by business impact&lt;/strong&gt;, not engineering preference&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Attach debt reduction to feature work&lt;/strong&gt; — when building a new feature in a high-debt area, clean up that area alongside the feature&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Track the results&lt;/strong&gt; — measure feature delivery time, incident frequency, and deployment frequency before and after&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Make it visible&lt;/strong&gt; — every debt work item has a ticket, every ticket has a business justification&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Over 6-12 months, this steady approach produces a dramatically healthier codebase without ever requiring a "feature freeze."&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://www.linkedin.com/pulse/real-cost-quick-fixes-how-technical-shortcuts-become-business-jha-ro1tc/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>technicaldebt</category>
      <category>softwareengineering</category>
      <category>ctostrategy</category>
      <category>engineeringleadership</category>
    </item>
    <item>
      <title>Why I Stopped Charging Hourly and Started Charging Per Milestone — And Why My Clients Prefer It</title>
      <dc:creator>Deepak Kumar Jha</dc:creator>
      <pubDate>Sat, 01 Aug 2026 13:38:17 +0000</pubDate>
      <link>https://dev.to/build-with-deepak/why-i-stopped-charging-hourly-and-started-charging-per-milestone-and-why-my-clients-prefer-it-27jk</link>
      <guid>https://dev.to/build-with-deepak/why-i-stopped-charging-hourly-and-started-charging-per-milestone-and-why-my-clients-prefer-it-27jk</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmedia.licdn.com%2Fdms%2Fimage%2Fv2%2FD5612AQFa-h2EznJYng%2Farticle-cover_image-shrink_600_2000%2FB56ZyTEmfBJQAQ-%2F0%2F1771993983600" 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%2Fmedia.licdn.com%2Fdms%2Fimage%2Fv2%2FD5612AQFa-h2EznJYng%2Farticle-cover_image-shrink_600_2000%2FB56ZyTEmfBJQAQ-%2F0%2F1771993983600" alt="Why I Stopped Charging Hourly and Started Charging Per Milestone" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Why I Stopped Charging Hourly and Started Charging Per Milestone — And Why My Clients Prefer It
&lt;/h1&gt;

&lt;p&gt;Three years ago, I was working with a startup founder in New York. We were eight weeks into a backend architecture project, billed hourly. Every two weeks, the same uncomfortable conversation happened: "Deepak, can you explain why this took 47 hours? I expected it to take around 30."&lt;/p&gt;

&lt;p&gt;The problem wasn't dishonesty or poor estimation. The problem was structural. &lt;strong&gt;Hourly billing puts the client and the contractor in adversarial positions&lt;/strong&gt; — the client wants fewer hours, the contractor has no incentive to be faster. Every invoice becomes a negotiation.&lt;/p&gt;

&lt;p&gt;After that project, I restructured my entire engagement model. I stopped billing hourly and moved to milestone-based pricing. The result was transformative — for my clients and for me.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem with Hourly Billing (From Both Sides)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The Client's Perspective:&lt;/strong&gt; When you hire a contractor at $100-200 per hour, every hour feels like a meter running. This creates exactly the wrong dynamic for senior technical work. Architecture decisions, system design, debugging complex production issues — these require deep thinking, exploration of options, and sometimes deliberate pauses to ensure the right approach.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Contractor's Perspective:&lt;/strong&gt; Hourly billing punishes efficiency. If I solve a problem in 2 hours that another developer would take 20 hours to solve, I earn 10% of what a less experienced developer would earn for the same outcome. My 12+ years of experience actually reduces my income.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Trust Problem:&lt;/strong&gt; The fundamental issue is misaligned incentives. Hourly billing means the contractor earns more when things take longer. The client knows this. Even if the contractor is completely honest, the suspicion is always there.&lt;/p&gt;

&lt;h2&gt;
  
  
  How Milestone-Based Pricing Works
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Phase 1: Discovery and Scope (Paid, Fixed Price)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Before any major project begins, I conduct a paid discovery phase (typically 1-2 weeks). This results in a detailed scope document including: business objectives and success criteria, technical architecture overview, a milestone breakdown with clear deliverables, a fixed price for each milestone, and acceptance criteria definition.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Phase 2: Milestone Execution&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The project is divided into 3-7 milestones, each representing a functional deliverable. Not "backend work for 3 weeks" — but "User authentication system deployed and tested, supporting email/password, OAuth, and role-based access control."&lt;/p&gt;

&lt;p&gt;Each milestone has a fixed price. Payment is made when the milestone is delivered and accepted. This aligns incentives correctly: I'm rewarded for being efficient and experienced, not for being slow. The client pays for outcomes, not hours.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Phase 3: Change Management&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If the client wants to add scope within an existing milestone, we discuss the impact and either adjust the milestone price or create a new milestone. Projects always evolve — milestone pricing handles this cleanly.&lt;/p&gt;

&lt;h2&gt;
  
  
  How I Price Milestones
&lt;/h2&gt;

&lt;p&gt;I price based on three factors:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Value to the client.&lt;/strong&gt; A user authentication system that unlocks subscriptions is worth more than a logging improvement.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Complexity and risk.&lt;/strong&gt; Milestones involving third-party integrations or data migrations carry more risk; the price includes a buffer.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;My expertise and efficiency.&lt;/strong&gt; If I can deliver faster because I've built similar systems before, the savings are mine to keep.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In practice, my effective hourly rate under milestone pricing is 30-50% higher than under hourly billing. And my clients' total project cost is typically comparable or lower — because upfront scoping prevents scope creep.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why International Clients Prefer This Model
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;No time zone accounting&lt;/strong&gt; — clients evaluate deliverables, not timesheets&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Clear progress visibility&lt;/strong&gt; — each milestone is a visible, testable deliverable&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Predictable budget&lt;/strong&gt; — total cost is known from the beginning, no surprise invoices&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Quality alignment&lt;/strong&gt; — I'm paid per deliverable, so I have every incentive to build it well the first time&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One client in London told me directly: &lt;em&gt;"I always felt like I was managing their time more than managing the project. With you, I just review milestones. It's a completely different experience."&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://www.linkedin.com/pulse/why-i-stopped-charging-hourly-started-per-milestone-my-deepak-jha-iiklc/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>freelanceengineering</category>
      <category>contractdevelopment</category>
      <category>remotework</category>
      <category>node</category>
    </item>
  </channel>
</rss>
