<?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: Sajjad</title>
    <description>The latest articles on DEV Community by Sajjad (@sajjadcodes).</description>
    <link>https://dev.to/sajjadcodes</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%2F1219428%2F4f0c31cf-7674-4f1b-8150-995f2b421814.png</url>
      <title>DEV Community: Sajjad</title>
      <link>https://dev.to/sajjadcodes</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sajjadcodes"/>
    <language>en</language>
    <item>
      <title>AWS Was Supposed to Simplify DevOps. So Why Is Everyone Looking for Alternatives?</title>
      <dc:creator>Sajjad</dc:creator>
      <pubDate>Mon, 26 Oct 2026 14:37:46 +0000</pubDate>
      <link>https://dev.to/sajjadcodes/aws-was-supposed-to-simplify-devops-so-why-is-everyone-looking-for-alternatives-2j2k</link>
      <guid>https://dev.to/sajjadcodes/aws-was-supposed-to-simplify-devops-so-why-is-everyone-looking-for-alternatives-2j2k</guid>
      <description>&lt;p&gt;&lt;em&gt;How the cloud revolutionized software development, became unnecessarily complicated, and why developers are looking for simpler solutions.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The golden age of AWS&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;There was a time when AWS was the obvious choice.&lt;/p&gt;

&lt;p&gt;Launching a startup? AWS. Building a scalable backend? AWS. Running enterprise infrastructure? AWS.&lt;/p&gt;

&lt;p&gt;When Amazon launched S3 and EC2 in 2006, it fundamentally changed software development. Companies no longer needed to purchase physical servers or build data centers before launching products. Developers could rent computing power on demand and scale as their businesses grew.&lt;/p&gt;

&lt;p&gt;AWS made infrastructure accessible to everyone. It was a revolution.&lt;/p&gt;

&lt;p&gt;But over time, something changed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When simplicity became a nightmare&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;AWS kept expanding. Every problem seemed to get another service, another configuration option, and another layer of abstraction.&lt;/p&gt;

&lt;p&gt;Need to deploy an application? Choose between EC2, ECS, EKS, Fargate, App Runner, and Lambda.&lt;/p&gt;

&lt;p&gt;Need a database? There are multiple options, each with different capabilities and trade-offs.&lt;/p&gt;

&lt;p&gt;Need networking, permissions, monitoring, and security? Prepare to learn IAM policies, VPCs, subnets, security groups, load balancers, CloudWatch, and more.&lt;/p&gt;

&lt;p&gt;These services aren't identical, but their capabilities sometimes overlap, making the right choice surprisingly difficult.&lt;/p&gt;

&lt;p&gt;And here's the irony: the cloud was supposed to make infrastructure easier, yet developers can spend days configuring infrastructure before delivering a single product feature.&lt;/p&gt;

&lt;p&gt;For large enterprises with dedicated DevOps teams, this flexibility can be valuable. For a solo developer building a small SaaS, it can be complete overkill.&lt;/p&gt;

&lt;p&gt;Sometimes all you need is a server, PostgreSQL, Docker, backups, and automated deployments.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why should that require an infrastructure engineering project?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Developers are pushing back&lt;/p&gt;

&lt;p&gt;This frustration isn't merely theoretical.&lt;/p&gt;

&lt;p&gt;In public developer discussions on Hacker News, engineers have described startups spending disproportionate effort managing complicated AWS architectures instead of building their products. Others have complained about IAM configuration, forgotten resources, and the difficulty of extracting useful information from CloudWatch.&lt;/p&gt;

&lt;p&gt;Meanwhile, 37signals, the company behind Basecamp and HEY, completed a migration of its remaining legacy applications away from cloud infrastructure in 2023.&lt;/p&gt;

&lt;p&gt;Its founder, &lt;strong&gt;David Heinemeier Hansson&lt;/strong&gt;, announced the move with the words:&lt;/p&gt;

&lt;p&gt;«"We're out."»&lt;/p&gt;

&lt;p&gt;The company cited potential cost savings and performance benefits from running those workloads on its own hardware.&lt;/p&gt;

&lt;p&gt;Of course, one company's experience doesn't prove that everyone should leave AWS. But it demonstrates an important point: using a hyperscaler isn't the only legitimate way to run production software.&lt;/p&gt;

&lt;p&gt;The rise of cloud-agnostic DevOps&lt;/p&gt;

&lt;p&gt;The alternative isn't necessarily replacing AWS with Google Cloud and repeating the same architecture.&lt;/p&gt;

&lt;p&gt;It's choosing technologies that preserve flexibility and avoiding unnecessary dependence on any single provider.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Consider a practical stack:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Docker for packaging applications.&lt;/li&gt;
&lt;li&gt;PostgreSQL for relational data.&lt;/li&gt;
&lt;li&gt;GitHub Actions for CI/CD.&lt;/li&gt;
&lt;li&gt;Terraform or OpenTofu for infrastructure automation when needed.&lt;/li&gt;
&lt;li&gt;Standard APIs and portable application configurations.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A Dockerized NestJS application can run on multiple hosting platforms without rewriting its business logic.&lt;/p&gt;

&lt;p&gt;That's the idea behind cloud-agnostic engineering: choose infrastructure based on actual requirements, not brand loyalty.&lt;/p&gt;

&lt;p&gt;But don't turn portability into another over-engineered project. You don't need Kubernetes or elaborate abstraction layers for every application.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Alternatives worth considering&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you're looking for simpler infrastructure, several options are worth exploring.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;DigitalOcean&lt;/strong&gt; offers a straightforward cloud experience with virtual machines, managed databases, and application hosting. It's a practical choice for conventional web applications and APIs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hetzner&lt;/strong&gt; provides affordable servers, making it attractive for developers who want to run Docker containers and manage their own infrastructure without the cost and complexity of a large cloud ecosystem.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Render&lt;/strong&gt; simplifies deploying applications, background workers, and databases. It's useful when you want to focus on your code instead of configuring infrastructure.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Railway&lt;/strong&gt; provides a developer-friendly way to deploy APIs, databases, and background services, particularly for prototypes and early-stage SaaS products.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Google Cloud&lt;/strong&gt; remains a powerful option for applications that need managed infrastructure, Kubernetes, analytics, and enterprise-scale capabilities. However, switching to another hyperscaler won't automatically solve infrastructure complexity.&lt;/p&gt;

&lt;p&gt;The right choice depends on your needs. VPS providers offer more control but require more maintenance. Managed platforms reduce operational work but may introduce platform-specific limitations.&lt;/p&gt;

&lt;p&gt;You don't need the biggest platform. You need the right one.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is AWS actually ending?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;No. AWS remains a major cloud platform, and many businesses benefit enormously from its ecosystem.&lt;/p&gt;

&lt;p&gt;What's changing is the assumption that AWS must be the default choice for every project.&lt;/p&gt;

&lt;p&gt;Developers increasingly have alternatives that let them deploy software without assembling and managing a huge collection of infrastructure services.&lt;/p&gt;

&lt;p&gt;A small SaaS doesn't need the same architecture as a global financial platform. A startup doesn't automatically need Kubernetes. And a complicated architecture isn't necessarily a better one.&lt;/p&gt;

&lt;p&gt;The future of DevOps isn't about using more infrastructure. It's about delivering reliable software with less unnecessary complexity.&lt;/p&gt;

&lt;p&gt;AWS helped create the cloud revolution. But developers don't owe any platform their loyalty.&lt;/p&gt;

&lt;p&gt;Choose the simplest architecture that meets your requirements, keep your options open where it makes sense, and spend more time building products than managing infrastructure.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What about you? Are you sticking with AWS, moving to another provider, or choosing simpler infrastructure from the beginning?&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>aws</category>
      <category>devops</category>
      <category>cloud</category>
      <category>backend</category>
    </item>
    <item>
      <title>I Built a Neomorphic UI Library for Next.js Because Interfaces Deserve More Personality</title>
      <dc:creator>Sajjad</dc:creator>
      <pubDate>Sun, 25 Oct 2026 22:27:07 +0000</pubDate>
      <link>https://dev.to/sajjadcodes/i-built-a-neomorphic-ui-library-for-nextjs-because-interfaces-deserve-more-personality-2nm9</link>
      <guid>https://dev.to/sajjadcodes/i-built-a-neomorphic-ui-library-for-nextjs-because-interfaces-deserve-more-personality-2nm9</guid>
      <description>&lt;p&gt;Most modern interfaces are built from familiar pieces.&lt;/p&gt;

&lt;p&gt;Buttons, cards, inputs, dropdowns, dialogs. We have excellent libraries for all of them. Yet when you browse enough products, you start noticing something: many interfaces feel remarkably similar.&lt;/p&gt;

&lt;p&gt;I wanted to explore a different visual direction.&lt;/p&gt;

&lt;p&gt;That's why I built "baloot-neomorphic-ui" (&lt;a href="https://github.com/sajjadcodes/baloot-neomorphic-ui" rel="noopener noreferrer"&gt;https://github.com/sajjadcodes/baloot-neomorphic-ui&lt;/a&gt;), a reusable neomorphic UI component library for Next.js App Router and Tailwind CSS v4.&lt;/p&gt;

&lt;p&gt;The idea was simple: take the soft depth of neomorphism and turn it into a practical component system developers can use in real applications.&lt;/p&gt;

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

&lt;p&gt;Neomorphism, sometimes called Soft UI, creates depth through subtle highlights and shadows. Instead of relying on strong borders or dramatic contrast, components appear to rise from or press into their surrounding surfaces.&lt;/p&gt;

&lt;p&gt;Done well, the result feels calm, tactile, and distinctive.&lt;/p&gt;

&lt;p&gt;But a visual concept is only the beginning. A design that looks beautiful in a mockup still needs to work as an actual interface.&lt;/p&gt;

&lt;p&gt;Buttons need clear states. Forms need useful validation. Components need to behave consistently. And the design needs to work in both light and dark themes.&lt;/p&gt;

&lt;p&gt;A design system should make consistency easier, not turn every new component into another styling problem.&lt;/p&gt;

&lt;p&gt;From visual idea to reusable components&lt;/p&gt;

&lt;p&gt;I built the library around that principle.&lt;/p&gt;

&lt;p&gt;Rather than recreating the same styles and behaviors across projects, the library provides reusable components with a shared visual language.&lt;/p&gt;

&lt;p&gt;It includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Form controls: inputs, textareas, selects, checkboxes, radio groups, switches, and sliders.&lt;/li&gt;
&lt;li&gt;Navigation and layout: cards, tabs, breadcrumbs, sidebars, pagination, and tables.&lt;/li&gt;
&lt;li&gt;Feedback components: alerts, snackbars, dialogs, progress indicators, and skeletons.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The library also includes theme tokens, allowing developers to customize the visual system instead of treating every component as an isolated design.&lt;/p&gt;

&lt;p&gt;It is built for Next.js App Router projects using Tailwind CSS v4, with TypeScript support.&lt;/p&gt;

&lt;p&gt;Design is more than shadows&lt;/p&gt;

&lt;p&gt;Neomorphism has a weakness: subtle visual depth can become a usability problem when it makes interactive elements difficult to distinguish.&lt;/p&gt;

&lt;p&gt;That trade-off matters.&lt;/p&gt;

&lt;p&gt;A component library cannot focus exclusively on appearance. It also needs to consider accessible markup, keyboard interactions, visible focus feedback, disabled states, and reduced-motion preferences where relevant.&lt;/p&gt;

&lt;p&gt;The goal isn't to make every element look beautiful at the expense of usability. It's to make the visual identity and the interaction design work together.&lt;/p&gt;

&lt;p&gt;That's the difference between a collection of styled components and a library intended for real applications.&lt;/p&gt;

&lt;p&gt;Try it in your next project&lt;/p&gt;

&lt;p&gt;You can install the package with npm:&lt;/p&gt;

&lt;p&gt;npm install baloot-neomorphic-ui&lt;/p&gt;

&lt;p&gt;Explore the source code, installation instructions, component examples, and theme customization options in the repository:&lt;/p&gt;

&lt;p&gt;GitHub: &lt;a href="https://github.com/sajjadcodes/baloot-neomorphic-ui" rel="noopener noreferrer"&gt;https://github.com/sajjadcodes/baloot-neomorphic-ui&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;npm: &lt;a href="https://www.npmjs.com/package/baloot-neomorphic-ui" rel="noopener noreferrer"&gt;https://www.npmjs.com/package/baloot-neomorphic-ui&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The library is an evolving project, and I'm interested in making it more useful as it grows.&lt;/p&gt;

&lt;p&gt;One question for frontend developers&lt;/p&gt;

&lt;p&gt;We have no shortage of component libraries. What we need isn't necessarily another library with more components.&lt;/p&gt;

&lt;p&gt;Sometimes, we need a different design perspective.&lt;/p&gt;

&lt;p&gt;When choosing a UI library, what matters most to you: visual identity, accessibility, customization, developer experience, or the speed of building an interface?&lt;/p&gt;

&lt;p&gt;I'd be interested to hear what other developers prioritize — and what you think neomorphism gets right or wrong.&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>webdev</category>
      <category>nextjs</category>
      <category>css</category>
    </item>
    <item>
      <title>The Developers Who Thrive in the AI Era Won't Necessarily Be the Ones Who Code the Fastest</title>
      <dc:creator>Sajjad</dc:creator>
      <pubDate>Tue, 20 Oct 2026 16:11:52 +0000</pubDate>
      <link>https://dev.to/sajjadcodes/the-developers-who-thrive-in-the-ai-era-wont-necessarily-be-the-ones-who-code-the-fastest-13do</link>
      <guid>https://dev.to/sajjadcodes/the-developers-who-thrive-in-the-ai-era-wont-necessarily-be-the-ones-who-code-the-fastest-13do</guid>
      <description>&lt;p&gt;There was a time when being a good developer often meant being the person who could solve a problem in code faster than everyone else.&lt;/p&gt;

&lt;p&gt;You knew the language, understood the framework, remembered the syntax, and could turn a requirement into a working feature. Those skills still matter. But something is changing.&lt;/p&gt;

&lt;p&gt;AI can now generate code, explain unfamiliar libraries, suggest implementations, and help developers move through tasks that once took hours. The tools are improving, and pretending otherwise won't help anyone.&lt;/p&gt;

&lt;p&gt;The question is no longer just how fast you can write code. It's what you can do with the time AI gives you back.&lt;/p&gt;

&lt;p&gt;Writing code was never the whole job&lt;/p&gt;

&lt;p&gt;Consider two developers.&lt;/p&gt;

&lt;p&gt;One can generate a working implementation in minutes but struggles to recognize a flawed design. The other takes longer to understand the problem, questions the requirements, evaluates the trade-offs, and builds a solution that can survive real-world use.&lt;/p&gt;

&lt;p&gt;Which one would you trust with a critical system?&lt;/p&gt;

&lt;p&gt;Generating code is not the same as engineering software. Production systems need more than implementations that work in a demonstration. They need security, reliability, maintainability, observability, and decisions that make sense in context.&lt;/p&gt;

&lt;p&gt;AI can help with these things, too. But someone still needs to evaluate the results and take responsibility for the system.&lt;/p&gt;

&lt;p&gt;When producing code becomes easier, engineering judgment becomes harder to ignore.&lt;/p&gt;

&lt;p&gt;The value of knowing what to build&lt;/p&gt;

&lt;p&gt;One of the most underrated skills in software engineering is identifying the right problem.&lt;/p&gt;

&lt;p&gt;It's possible to spend weeks building something technically impressive that solves a problem nobody has. It's also possible to solve a meaningful problem with a relatively simple implementation.&lt;/p&gt;

&lt;p&gt;AI makes it easier to explore possible solutions. That is useful, but it doesn't automatically tell us which problem deserves our attention.&lt;/p&gt;

&lt;p&gt;Understanding users, recognizing constraints, choosing trade-offs, and deciding what not to build remain essential.&lt;/p&gt;

&lt;p&gt;The developer who asks better questions may produce more value than the developer who generates more code.&lt;/p&gt;

&lt;p&gt;The danger of becoming dependent&lt;/p&gt;

&lt;p&gt;There is another side to this transformation.&lt;/p&gt;

&lt;p&gt;If we accept every AI suggestion without understanding it, we risk becoming operators of tools rather than engineers capable of making independent decisions.&lt;/p&gt;

&lt;p&gt;A generated implementation might look convincing while containing a subtle security flaw, an unnecessary abstraction, or a concurrency bug that only appears under production load.&lt;/p&gt;

&lt;p&gt;The danger isn't using AI. The danger is losing the ability to evaluate what it produces.&lt;/p&gt;

&lt;p&gt;Use AI to accelerate your thinking, not to replace it.&lt;/p&gt;

&lt;p&gt;Ask it to challenge your architecture. Compare alternative designs. Investigate edge cases. Review its assumptions. And when something fails, make sure you understand why.&lt;/p&gt;

&lt;p&gt;The goal should be to become a stronger engineer with AI, not a less capable engineer without it.&lt;/p&gt;

&lt;p&gt;What should developers focus on now?&lt;/p&gt;

&lt;p&gt;I don't think the answer is to abandon programming fundamentals or chase every new AI tool.&lt;/p&gt;

&lt;p&gt;Instead, developers should deepen the skills that help them make better decisions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;System design: Understand how components interact and where failures occur.&lt;/li&gt;
&lt;li&gt;Problem-solving: Separate the actual problem from the first proposed solution.&lt;/li&gt;
&lt;li&gt;Critical thinking: Verify generated code instead of trusting confident explanations.&lt;/li&gt;
&lt;li&gt;Communication: Understand requirements, explain trade-offs, and work effectively with people.&lt;/li&gt;
&lt;li&gt;Ownership: Take responsibility for what reaches production, regardless of who or what wrote the code.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These skills aren't new. What is changing is how valuable they become when implementation gets cheaper and faster.&lt;/p&gt;

&lt;p&gt;The real competition is changing&lt;/p&gt;

&lt;p&gt;I don't believe AI will make every developer obsolete. I also don't believe that simply knowing how to use an AI coding assistant will guarantee a successful career.&lt;/p&gt;

&lt;p&gt;The more realistic possibility is that the expectations of software engineering will change. Some tasks will become easier, some roles will evolve, and some developers will need to rethink how they create value.&lt;/p&gt;

&lt;p&gt;The developers who adapt won't necessarily be the ones who type the fastest or use the most tools. They'll be the ones who combine technical ability with sound judgment, curiosity, and a willingness to keep learning.&lt;/p&gt;

&lt;p&gt;The future belongs neither to developers who reject AI nor to those who blindly depend on it. It belongs to developers who know how to use it without giving up the ability to think for themselves.&lt;/p&gt;

&lt;p&gt;And that raises a question worth discussing.&lt;/p&gt;

&lt;p&gt;If AI can already write a significant amount of our code, what do you believe will distinguish an excellent software engineer from an average one five years from now?&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>softwareengineering</category>
      <category>webdev</category>
    </item>
    <item>
      <title>5 Mistakes That Make Background Jobs Unreliable</title>
      <dc:creator>Sajjad</dc:creator>
      <pubDate>Mon, 19 Oct 2026 15:48:33 +0000</pubDate>
      <link>https://dev.to/sajjadcodes/5-mistakes-that-make-background-jobs-unreliable-4a67</link>
      <guid>https://dev.to/sajjadcodes/5-mistakes-that-make-background-jobs-unreliable-4a67</guid>
      <description>&lt;p&gt;Background jobs are easy to underestimate.&lt;/p&gt;

&lt;p&gt;You enqueue a task, a worker picks it up, and the work gets done. At least, that's how it looks when everything works.&lt;/p&gt;

&lt;p&gt;In production, jobs can fail halfway through, run more than once, get stuck, or overwhelm a dependency. The problem isn't just that a job fails. It's what happens next.&lt;/p&gt;

&lt;p&gt;Here are five mistakes that can make background processing unreliable — and how to avoid them.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Retrying Without Backoff
&lt;/h2&gt;

&lt;p&gt;Retries are necessary, but retrying immediately after every failure can make an outage worse.&lt;/p&gt;

&lt;p&gt;Imagine a worker calling a payment provider that's temporarily unavailable. If hundreds of jobs retry continuously, they add even more pressure to an already struggling service.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use exponential backoff with jitter.&lt;/strong&gt; Increase the delay between attempts and add randomness to prevent many jobs from retrying simultaneously.&lt;/p&gt;

&lt;p&gt;Retries should help a system recover, not amplify its failures.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Assuming Every Job Runs Only Once
&lt;/h2&gt;

&lt;p&gt;A worker might complete an operation but crash before acknowledging the message. The queue can then deliver that message again.&lt;/p&gt;

&lt;p&gt;This is normal behavior in many distributed systems, not an exceptional edge case.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Design jobs to be idempotent whenever possible.&lt;/strong&gt; Processing the same job twice should not create duplicate payments, send repeated notifications unnecessarily, or corrupt data.&lt;/p&gt;

&lt;p&gt;For critical operations, use stable operation identifiers and database constraints or deduplication records where appropriate.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Ignoring Failed and Stuck Jobs
&lt;/h2&gt;

&lt;p&gt;A job can fail repeatedly without anyone noticing. Another might remain in progress because a worker crashed or a dependency never responded.&lt;/p&gt;

&lt;p&gt;A queue can appear healthy while important business operations are silently falling behind.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Track job failures, queue depth, processing time, and the age of the oldest pending job.&lt;/strong&gt; Define alerts for conditions that actually affect users or business operations.&lt;/p&gt;

&lt;p&gt;A reliable system doesn't just process jobs. It makes failures visible.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Processing Jobs Without Clear Failure Boundaries
&lt;/h2&gt;

&lt;p&gt;Some jobs perform several operations: update a database, call an external API, and publish an event.&lt;/p&gt;

&lt;p&gt;If the third step fails, the first two might already have succeeded. Retrying the entire job blindly can repeat side effects.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Break work into clear, recoverable steps.&lt;/strong&gt; Use transactions for operations within a single database where appropriate, and use idempotency, durable state, or compensating actions when coordinating external systems.&lt;/p&gt;

&lt;p&gt;Don't assume that one failed step means everything else was rolled back.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Having No Recovery Strategy
&lt;/h2&gt;

&lt;p&gt;Eventually, some jobs will exhaust their retries. If they simply disappear from the normal workflow, you can lose important work or spend hours investigating what happened.&lt;/p&gt;

&lt;p&gt;A dead-letter queue can isolate jobs that cannot be processed successfully, but it isn't a complete recovery strategy by itself.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Decide what happens after the final retry.&lt;/strong&gt; Preserve enough context to investigate the failure, provide a safe way to replay eligible jobs, and prevent replaying a job from repeating irreversible side effects.&lt;/p&gt;

&lt;p&gt;Recovery should be designed before the first production incident, not during one.&lt;/p&gt;

&lt;h2&gt;
  
  
  Reliability Is About What Happens After Failure
&lt;/h2&gt;

&lt;p&gt;Background jobs don't become reliable simply because a queue and a worker are running.&lt;/p&gt;

&lt;p&gt;They become reliable when duplicate delivery is expected, failures are observable, retries are controlled, and unfinished work can be recovered safely.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The goal isn't to prevent every failure. It's to make failures predictable, contained, and recoverable.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That's the difference between a background worker that usually works and a background processing system you can trust.&lt;/p&gt;

</description>
      <category>backend</category>
      <category>programming</category>
      <category>webdev</category>
      <category>architecture</category>
    </item>
    <item>
      <title>I'm Building Balootix: My Journey Toward Building Real-World Software</title>
      <dc:creator>Sajjad</dc:creator>
      <pubDate>Wed, 14 Oct 2026 16:23:13 +0000</pubDate>
      <link>https://dev.to/sajjadcodes/im-building-balootix-my-journey-toward-building-real-world-software-4kb9</link>
      <guid>https://dev.to/sajjadcodes/im-building-balootix-my-journey-toward-building-real-world-software-4kb9</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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvp4p2th8gomfpizyi0yf.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvp4p2th8gomfpizyi0yf.png" alt=" " width="800" height="377"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Launching a website is an exciting milestone, but for me, it's only the beginning.&lt;/p&gt;

&lt;p&gt;I've officially launched the Balootix website, and I'm excited to share more about what I'm building, the engineering challenges I encounter, and the lessons I learn along the way.&lt;/p&gt;

&lt;p&gt;My goal is to build real-world software products and share the engineering decisions behind them.&lt;/p&gt;

&lt;p&gt;Here's what I'm working on.&lt;/p&gt;

&lt;h2&gt;
  
  
  🚀 Balootix
&lt;/h2&gt;

&lt;p&gt;Balootix is the brand behind the software products I'm building.&lt;/p&gt;

&lt;p&gt;Rather than treating a website launch as the finish line, I see it as the starting point for a much bigger journey: developing useful software, solving real engineering problems, and sharing what I learn with the developer community.&lt;/p&gt;

&lt;h2&gt;
  
  
  🏗️ Baloot Org: My Current Project
&lt;/h2&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftmfjuoyu5i0zvnhfp1w2.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftmfjuoyu5i0zvnhfp1w2.png" alt=" " width="800" height="372"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Baloot Org is a multi-tenant SaaS project focused on organizational management.&lt;/p&gt;

&lt;p&gt;The idea is to provide a structured way to manage organizations, departments, organizational units, and roles.&lt;/p&gt;

&lt;p&gt;I've developed the backend and made the project publicly available on GitHub. The frontend is still in development, so Baloot Org isn't yet a finished, publicly available application.&lt;/p&gt;

&lt;p&gt;Working on this project has given me an opportunity to explore several important software engineering concepts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Database design:&lt;/strong&gt; Modeling organizational structures and relationships.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backend architecture:&lt;/strong&gt; Designing APIs and organizing application logic.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multi-tenancy:&lt;/strong&gt; Building an application designed to serve multiple organizations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hierarchical data:&lt;/strong&gt; Working with organizational units and their relationships.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Maintainability:&lt;/strong&gt; Making design decisions that allow a project to evolve as it grows.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I'm particularly interested in the engineering decisions behind these systems: how to model the data, how to retrieve organizational hierarchies efficiently, and how to build a backend that remains maintainable as the application grows.&lt;/p&gt;

&lt;p&gt;You can explore the project here:&lt;/p&gt;

&lt;p&gt;🔗 &lt;a href="https://github.com/sajjadcodes/baloot-org" rel="noopener noreferrer"&gt;https://github.com/sajjadcodes/baloot-org&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🔮 What's Next?
&lt;/h2&gt;

&lt;p&gt;Baloot Org is my current focus, but I have other ideas for the Balootix ecosystem.&lt;/p&gt;

&lt;p&gt;Two projects I'd like to explore next are:&lt;/p&gt;

&lt;h3&gt;
  
  
  Baloot Pay
&lt;/h3&gt;

&lt;p&gt;A planned payment-service project focused on payment infrastructure and the engineering challenges involved in building reliable payment systems.&lt;/p&gt;

&lt;h3&gt;
  
  
  Baloot Signal
&lt;/h3&gt;

&lt;p&gt;A planned messaging infrastructure project built around event-driven architecture, with a focus on how systems communicate and process events.&lt;/p&gt;

&lt;p&gt;Both are future projects. I'll share more about them as development progresses.&lt;/p&gt;

&lt;h2&gt;
  
  
  💡 Why I'm Sharing My Journey
&lt;/h2&gt;

&lt;p&gt;I believe one of the best ways to demonstrate software engineering skills is to build real things and explain the thinking behind them.&lt;/p&gt;

&lt;p&gt;That's what I want to do here on DEV.to.&lt;/p&gt;

&lt;p&gt;I plan to share practical articles about backend development, databases, system architecture, and the challenges I encounter while building my projects.&lt;/p&gt;

&lt;p&gt;Rather than focusing only on theory, I want to explore how technologies work in real applications, why particular approaches make sense, and what I learn from implementing them.&lt;/p&gt;

&lt;p&gt;Hopefully, these articles will be useful to other developers who are building their own applications and exploring similar engineering challenges.&lt;/p&gt;

&lt;h2&gt;
  
  
  🤝 Let's Connect
&lt;/h2&gt;

&lt;p&gt;If you're interested in backend engineering, SaaS architecture, databases, or event-driven systems, I'd love to connect and exchange ideas.&lt;/p&gt;

&lt;p&gt;You can learn more about Balootix here:&lt;/p&gt;

&lt;p&gt;🌐 &lt;a href="https://balootix.com" rel="noopener noreferrer"&gt;https://balootix.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is just the beginning. More projects, more engineering challenges, and more lessons to share.&lt;/p&gt;

&lt;p&gt;Thanks for reading!&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>architecture</category>
      <category>buildinpublic</category>
    </item>
  </channel>
</rss>
