Umar Draz

Umar Draz Contact information, map and directions, contact form, opening hours, services, ratings, photos, videos and announcements from Umar Draz, Web designer, D-Ground People Colony, Faisalabad.

I’m a Full-Stack Developer with 4+ years of experience building high-performance web apps using MERN, Laravel & WordPress, helping turn complex ideas into reliable solutions that drive business growth.

𝐌𝐨𝐬𝐭 𝐩𝐞𝐨𝐩𝐥𝐞 𝐭𝐫𝐞𝐚𝐭 "𝐜𝐮𝐬𝐭𝐨𝐦 𝐖𝐨𝐫𝐝𝐏𝐫𝐞𝐬𝐬 𝐨𝐫 𝐚 𝐩𝐚𝐠𝐞 𝐛𝐮𝐢𝐥𝐝𝐞𝐫" 𝐚𝐬 𝐚 𝐭𝐞𝐜𝐡𝐧𝐢𝐜𝐚𝐥 𝐪𝐮𝐞𝐬𝐭𝐢𝐨𝐧.It's actually a business question. I've b...
11/08/2026

𝐌𝐨𝐬𝐭 𝐩𝐞𝐨𝐩𝐥𝐞 𝐭𝐫𝐞𝐚𝐭 "𝐜𝐮𝐬𝐭𝐨𝐦 𝐖𝐨𝐫𝐝𝐏𝐫𝐞𝐬𝐬 𝐨𝐫 𝐚 𝐩𝐚𝐠𝐞 𝐛𝐮𝐢𝐥𝐝𝐞𝐫" 𝐚𝐬 𝐚 𝐭𝐞𝐜𝐡𝐧𝐢𝐜𝐚𝐥 𝐪𝐮𝐞𝐬𝐭𝐢𝐨𝐧.
It's actually a business question. I've built both. Simple marketing sites with Elementor or Divi, and fully custom WordPress platforms for clients with real business logic behind them. The right answer changes depending on what the business actually needs not on which option feels more modern.

𝐏𝐚𝐠𝐞 𝐛𝐮𝐢𝐥𝐝𝐞𝐫𝐬 𝐦𝐚𝐤𝐞 𝐬𝐞𝐧𝐬𝐞 𝐰𝐡𝐞𝐧:
• The site is mostly static content
• There's no in-house developer to maintain it
• Getting live quickly matters more than long-term flexibility
• The budget is limited in the early stage

𝐂𝐮𝐬𝐭𝐨𝐦 𝐖𝐨𝐫𝐝𝐏𝐫𝐞𝐬𝐬 𝐝𝐞𝐯𝐞𝐥𝐨𝐩𝐦𝐞𝐧𝐭 𝐦𝐚𝐤𝐞𝐬 𝐦𝐨𝐫𝐞 𝐬𝐞𝐧𝐬𝐞 𝐰𝐡𝐞𝐧:
• The site needs to scale with traffic or business logic
• Page speed directly affects conversions or revenue
• Security requirements are strict
• The roadmap includes custom features later booking systems, membership areas, internal tool integrations

Here's the part people usually miss. Page builders tend to load more CSS, JavaScript, and unused code than a page actually needs. For a small brochure site, that's rarely a problem. Once traffic grows, every extra second of load time starts costing conversions.

Custom development costs more upfront and takes longer to launch. But it's usually cheaper to maintain over time, because you're not working around a builder's limitations every time the business needs something specific.

Neither option is universally better. The real mistake is choosing one because it's popular, or because a competitor uses it, instead of matching the tool to what the business actually needs today and two years from now.

If you're evaluating this for your own project: how complex will your site realistically need to be as the business grows? Which one have you used, and did it hold up as your business scaled?

𝐄𝐯𝐞𝐫𝐲𝐨𝐧𝐞 𝐭𝐫𝐞𝐚𝐭𝐬 𝐖𝐨𝐫𝐝𝐏𝐫𝐞𝐬𝐬'𝐬 𝐦𝐚𝐫𝐤𝐞𝐭 𝐬𝐡𝐚𝐫𝐞 𝐥𝐢𝐤𝐞 𝐚 𝐦𝐚𝐫𝐤𝐞𝐭𝐢𝐧𝐠 𝐬𝐭𝐚𝐭.It isn't. Over 40% of the web runs on WordPress  and once...
06/08/2026

𝐄𝐯𝐞𝐫𝐲𝐨𝐧𝐞 𝐭𝐫𝐞𝐚𝐭𝐬 𝐖𝐨𝐫𝐝𝐏𝐫𝐞𝐬𝐬'𝐬 𝐦𝐚𝐫𝐤𝐞𝐭 𝐬𝐡𝐚𝐫𝐞 𝐥𝐢𝐤𝐞 𝐚 𝐦𝐚𝐫𝐤𝐞𝐭𝐢𝐧𝐠 𝐬𝐭𝐚𝐭.
It isn't. Over 40% of the web runs on WordPress and once you see how it's built, that number stops being surprising. Most platforms make you choose between simplicity and flexibility. WordPress never did.

Here's why: it separates content, design, and functionality. Your data sits in a simple database. Your design lives in a swappable theme. Your features come from plugins that hook into the core without ever touching it.

That's why a business owner can add e-commerce or SEO tools in minutes with zero code and a developer can build a fully custom app on the same core using the REST API. Same system. Two completely different use cases. That's not luck, that's design.

People call WordPress "outdated" when they compare it to newer frameworks on code elegance alone. That misses the point. WordPress won by being accessible enough for business owners and extensible enough for developers, at the same time. Few platforms pull that off.

The real lesson: the best technology isn't the one with the cleanest architecture on paper. It's the one that solves the most real problems with the lowest barrier to entry.

Have you used WordPress for a project? Did it hold up, or did you outgrow it?

𝐀 𝐰𝐞𝐛𝐬𝐢𝐭𝐞 𝐠𝐨𝐢𝐧𝐠 𝐝𝐨𝐰𝐧 𝐟𝐨𝐫 𝐚𝐧 𝐡𝐨𝐮𝐫 𝐢𝐬 𝐚𝐧𝐧𝐨𝐲𝐢𝐧𝐠. 𝐀 𝐰𝐞𝐛𝐬𝐢𝐭𝐞 𝐠𝐨𝐢𝐧𝐠 𝐝𝐨𝐰𝐧 𝐰𝐢𝐭𝐡 𝐧𝐨 𝐰𝐚𝐲 𝐭𝐨 𝐛𝐫𝐢𝐧𝐠 𝐢𝐭 𝐛𝐚𝐜𝐤 𝐢𝐬 𝐚 𝐛𝐮𝐬𝐢𝐧𝐞𝐬𝐬 𝐩𝐫𝐨𝐛𝐥𝐞𝐦.In...
05/08/2026

𝐀 𝐰𝐞𝐛𝐬𝐢𝐭𝐞 𝐠𝐨𝐢𝐧𝐠 𝐝𝐨𝐰𝐧 𝐟𝐨𝐫 𝐚𝐧 𝐡𝐨𝐮𝐫 𝐢𝐬 𝐚𝐧𝐧𝐨𝐲𝐢𝐧𝐠. 𝐀 𝐰𝐞𝐛𝐬𝐢𝐭𝐞 𝐠𝐨𝐢𝐧𝐠 𝐝𝐨𝐰𝐧 𝐰𝐢𝐭𝐡 𝐧𝐨 𝐰𝐚𝐲 𝐭𝐨 𝐛𝐫𝐢𝐧𝐠 𝐢𝐭 𝐛𝐚𝐜𝐤 𝐢𝐬 𝐚 𝐛𝐮𝐬𝐢𝐧𝐞𝐬𝐬 𝐩𝐫𝐨𝐛𝐥𝐞𝐦.
In a lot of projects I've reviewed, backups are the thing nobody thinks about until the moment they desperately need one.

𝐇𝐞𝐫𝐞'𝐬 𝐰𝐡𝐚𝐭 𝐚𝐜𝐭𝐮𝐚𝐥𝐥𝐲 𝐜𝐚𝐮𝐬𝐞𝐬 𝐦𝐨𝐬𝐭 𝐨𝐟 𝐭𝐡𝐞𝐬𝐞 𝐞𝐦𝐞𝐫𝐠𝐞𝐧𝐜𝐢𝐞𝐬:
1- A plugin update breaks the checkout page.
2- A developer pushes a change straight to production.
3- A hosting account gets suspended over a billing mixup.
4- A database gets corrupted mid-migration.

None of this is rare. It happens on WordPress sites, Laravel apps, custom platforms. The stack doesn't matter. The real issue isn't that something broke. Things break eventually, on every platform. The real issue is what happens next. If there's a clean, tested backup, it's a short fix. Restore, verify, move on with your day.

If there isn't, it turns into hours of manual recovery, lost orders, lost form submissions, and sometimes content nobody can rebuild from memory. One mistake I see often: businesses assume their hosting provider already handles this. Most shared hosting either doesn't back up reliably, keeps backups for a few days at most, or stores them on the same server as the site, which doesn't help much if that server is the actual problem.

𝐀 𝐛𝐚𝐜𝐤𝐮𝐩 𝐬𝐞𝐭𝐮𝐩 𝐭𝐡𝐚𝐭 𝐚𝐜𝐭𝐮𝐚𝐥𝐥𝐲 𝐩𝐫𝐨𝐭𝐞𝐜𝐭𝐬 𝐲𝐨𝐮 𝐥𝐨𝐨𝐤𝐬 𝐝𝐢𝐟𝐟𝐞𝐫𝐞𝐧𝐭:
1- Automated, so it doesn't depend on someone remembering to run it.
2- Stored somewhere other than the hosting server.
3- Kept in multiple restore points, not just the latest one.
4- Tested occasionally by actually restoring it, not just created and forgotten.

None of this requires complicated engineering. It's basic risk management, and it costs far less than a day of downtime. If you run a business online, this is worth checking today rather than after something breaks.

What does your backup setup actually look like right now? Automated, manual, or honestly not sure?

𝐀 𝐰𝐞𝐛𝐬𝐢𝐭𝐞 𝐥𝐚𝐮𝐧𝐜𝐡 𝐟𝐞𝐞𝐥𝐬 𝐥𝐢𝐤𝐞 𝐭𝐡𝐞 𝐟𝐢𝐧𝐢𝐬𝐡 𝐥𝐢𝐧𝐞. 𝐈𝐭 𝐢𝐬𝐧'𝐭. 𝐈𝐭'𝐬 𝐭𝐡𝐞 𝐬𝐭𝐚𝐫𝐭𝐢𝐧𝐠 𝐩𝐨𝐢𝐧𝐭.Most budgets get this backwards. The deve...
31/07/2026

𝐀 𝐰𝐞𝐛𝐬𝐢𝐭𝐞 𝐥𝐚𝐮𝐧𝐜𝐡 𝐟𝐞𝐞𝐥𝐬 𝐥𝐢𝐤𝐞 𝐭𝐡𝐞 𝐟𝐢𝐧𝐢𝐬𝐡 𝐥𝐢𝐧𝐞. 𝐈𝐭 𝐢𝐬𝐧'𝐭. 𝐈𝐭'𝐬 𝐭𝐡𝐞 𝐬𝐭𝐚𝐫𝐭𝐢𝐧𝐠 𝐩𝐨𝐢𝐧𝐭.

Most budgets get this backwards. The development phase gets the bigger number, the tighter timeline, and all the attention. Maintenance gets whatever is left over, if anything. But here's the thing I keep seeing in real projects: almost everything that actually damages a business happens after launch, not before.

A plugin update breaks checkout. A dependency has a known vulnerability and nobody patched it. An SSL certificate expires on a Friday night. A framework version goes end-of-life and the app quietly becomes harder and riskier to touch every month it's ignored. None of that shows up in a project proposal. All of it shows up in a support ticket six months later.

In many production applications, the pattern looks the same. A team ships something solid. The client is happy. Everyone moves on to the next project. Then updates get skipped because "it's still working," until one unpatched dependency turns into downtime, or a routine WordPress core update breaks three plugins that were never tested together. At that point, the fix costs more than a year of proper maintenance would have.

Development builds the thing. Maintenance is what keeps that thing valuable, secure, and fast while the business around it keeps changing. New content, new integrations, new traffic patterns, new compliance requirements, new attack vectors. A website that isn't maintained doesn't stay still. It quietly decays.

The businesses that treat their site like production software, not a finished project, are the ones that don't get surprised by an outage during their biggest sales week. Maintenance isn't the boring add-on. It's the part of the job that actually protects the investment you already made in development.

What's been your experience? Do you budget for maintenance from day one, or does it usually become an afterthought once the site goes live?

𝐌𝐨𝐬𝐭 𝐛𝐮𝐬𝐢𝐧𝐞𝐬𝐬𝐞𝐬 𝐭𝐫𝐞𝐚𝐭 𝐥𝐚𝐮𝐧𝐜𝐡 𝐝𝐚𝐲 𝐚𝐬 𝐭𝐡𝐞 𝐟𝐢𝐧𝐢𝐬𝐡 𝐥𝐢𝐧𝐞. 𝐈𝐧 𝐫𝐞𝐚𝐥𝐢𝐭𝐲, 𝐢𝐭'𝐬 𝐰𝐡𝐞𝐫𝐞 𝐭𝐡𝐞 𝐫𝐞𝐚𝐥 𝐰𝐨𝐫𝐤 𝐬𝐭𝐚𝐫𝐭𝐬.I've seen this pattern ...
14/07/2026

𝐌𝐨𝐬𝐭 𝐛𝐮𝐬𝐢𝐧𝐞𝐬𝐬𝐞𝐬 𝐭𝐫𝐞𝐚𝐭 𝐥𝐚𝐮𝐧𝐜𝐡 𝐝𝐚𝐲 𝐚𝐬 𝐭𝐡𝐞 𝐟𝐢𝐧𝐢𝐬𝐡 𝐥𝐢𝐧𝐞. 𝐈𝐧 𝐫𝐞𝐚𝐥𝐢𝐭𝐲, 𝐢𝐭'𝐬 𝐰𝐡𝐞𝐫𝐞 𝐭𝐡𝐞 𝐫𝐞𝐚𝐥 𝐰𝐨𝐫𝐤 𝐬𝐭𝐚𝐫𝐭𝐬.
I've seen this pattern repeat across different projects. A company spends months planning a website. They review every page, approve every color, test every button. The site goes live. Everyone celebrates. Then, nothing.

No one checks how the site performs under real traffic. No one sets up error tracking. No one reviews analytics to see where visitors are dropping off. The team moves to the next project, and the website sits there, unmonitored, until something breaks or leads stop coming in.

That's the biggest mistake I see after launch: businesses stop paying attention right when the data starts telling them something. Here's why it happens. Budgets are usually planned around launch, not maintenance. Once the invoice is paid, the "website project" feels complete. But a website isn't a one-time deliverable. It's a system that needs observation, the same as any other piece of production software.

A simple example: many teams launch without basic error logging. A payment form fails silently, or a contact form stops sending emails, and nobody notices until a customer complains, or worse, until they just leave.

The fix isn't complicated. It usually takes a few hours of setup:
→ Error tracking, so failures get reported instead of discovered by accident
→ Analytics reviewed weekly, not just installed and forgotten
→ Uptime monitoring on critical pages like checkout or signup
→ A short list of KPIs tied to business goals, not vanity metrics

None of this needs a big budget. It needs treating the website as an ongoing responsibility instead of a finished project. The businesses that get the most value from their site aren't the ones with the most polished design. They're the ones who keep watching after launch and keep improving based on what they see.

What's your experience? Have you seen a website underperform simply because no one was watching it after launch?

𝐘𝐨𝐮𝐫 𝐰𝐞𝐛𝐬𝐢𝐭𝐞 𝐢𝐬𝐧'𝐭 𝐮𝐠𝐥𝐲. 𝐈𝐭'𝐬 𝐣𝐮𝐬𝐭 𝐪𝐮𝐢𝐞𝐭𝐥𝐲 𝐜𝐨𝐬𝐭𝐢𝐧𝐠 𝐲𝐨𝐮 𝐛𝐮𝐬𝐢𝐧𝐞𝐬𝐬.Most companies wait way too long to redesign because the...
06/07/2026

𝐘𝐨𝐮𝐫 𝐰𝐞𝐛𝐬𝐢𝐭𝐞 𝐢𝐬𝐧'𝐭 𝐮𝐠𝐥𝐲. 𝐈𝐭'𝐬 𝐣𝐮𝐬𝐭 𝐪𝐮𝐢𝐞𝐭𝐥𝐲 𝐜𝐨𝐬𝐭𝐢𝐧𝐠 𝐲𝐨𝐮 𝐛𝐮𝐬𝐢𝐧𝐞𝐬𝐬.
Most companies wait way too long to redesign because their site still "works." It loads. Visitors can browse it. Forms still submit. But working and performing are two different things.

Here are seven signs I look for when reviewing a website that's holding a business back not from a design agency's perspective, but from an engineer who has to open the code and fix it.

𝟏. 𝐍𝐨𝐛𝐨𝐝𝐲 𝐰𝐚𝐧𝐭𝐬 𝐭𝐨 𝐭𝐨𝐮𝐜𝐡 𝐭𝐡𝐞 𝐂𝐌𝐒 𝐚𝐧𝐲𝐦𝐨𝐫𝐞
If a two-line text change requires calling a developer, the problem isn't your content team. It's the architecture.
𝟐. 𝐈𝐭 𝐥𝐨𝐨𝐤𝐬 𝐟𝐢𝐧𝐞 𝐨𝐧 𝐝𝐞𝐬𝐤𝐭𝐨𝐩 𝐚𝐧𝐝 𝐛𝐫𝐞𝐚𝐤𝐬 𝐨𝐧 𝐦𝐨𝐛𝐢𝐥𝐞
Most traffic today comes from phones. If layouts shift or forms are painful on a small screen, you're losing leads before they ever reach you.
𝟑. 𝐋𝐨𝐚𝐝 𝐭𝐢𝐦𝐞 𝐤𝐞𝐞𝐩𝐬 𝐠𝐫𝐨𝐰𝐢𝐧𝐠 𝐞𝐯𝐞𝐫𝐲 𝐲𝐞𝐚𝐫
Every plugin, every unoptimized image, every "quick fix" adds weight. A site that loaded fast five years ago rarely stays that way without upkeep.
𝟒. 𝐂𝐨𝐧𝐯𝐞𝐫𝐬𝐢𝐨𝐧 𝐫𝐚𝐭𝐞𝐬 𝐡𝐚𝐯𝐞 𝐪𝐮𝐢𝐞𝐭𝐥𝐲 𝐝𝐫𝐨𝐩𝐩𝐞𝐝
Traffic stays flat, but leads or sales are falling. That's rarely a marketing problem alone often it's friction somewhere in the journey your team stopped noticing.
𝟓. 𝐀 𝐧𝐞𝐰 𝐟𝐞𝐚𝐭𝐮𝐫𝐞 𝐭𝐚𝐤𝐞𝐬 𝐰𝐞𝐞𝐤𝐬 𝐢𝐧𝐬𝐭𝐞𝐚𝐝 𝐨𝐟 𝐝𝐚𝐲𝐬
This is a technical debt signal. Tangled dependencies and undocumented customizations make even small changes slow and risky.
𝟔. 𝐒𝐞𝐜𝐮𝐫𝐢𝐭𝐲 𝐮𝐩𝐝𝐚𝐭𝐞𝐬 𝐠𝐞𝐭 𝐩𝐨𝐬𝐭𝐩𝐨𝐧𝐞𝐝 𝐛𝐞𝐜𝐚𝐮𝐬𝐞 "𝐢𝐭 𝐦𝐢𝐠𝐡𝐭 𝐛𝐫𝐞𝐚𝐤 𝐬𝐨𝐦𝐞𝐭𝐡𝐢𝐧𝐠"
That fear is usually justified and that's the real warning sign. A system too fragile to update safely is already overdue for rework.
𝟕. 𝐂𝐨𝐦𝐩𝐞𝐭𝐢𝐭𝐨𝐫𝐬' 𝐬𝐢𝐭𝐞𝐬 𝐟𝐞𝐞𝐥 𝐧𝐞𝐰𝐞𝐫, 𝐟𝐚𝐬𝐭𝐞𝐫, 𝐞𝐚𝐬𝐢𝐞𝐫 𝐭𝐨 𝐮𝐬𝐞
Design trends shift for real usability reasons clearer navigation, faster interactions. If yours feels stuck in an earlier era, visitors notice, even if they can't say why.

Which of these have you run into on your own site or a client's?

𝐘𝐨𝐮𝐫 𝐰𝐞𝐛𝐬𝐢𝐭𝐞 𝐢𝐬𝐧'𝐭 𝐟𝐢𝐧𝐢𝐬𝐡𝐞𝐝 𝐚𝐟𝐭𝐞𝐫 𝐥𝐚𝐮𝐧𝐜𝐡. 𝐈𝐭'𝐬 𝐣𝐮𝐬𝐭 𝐠𝐞𝐭𝐭𝐢𝐧𝐠 𝐬𝐭𝐚𝐫𝐭𝐞𝐝. That's a lesson I learned early in my career, and i...
04/07/2026

𝐘𝐨𝐮𝐫 𝐰𝐞𝐛𝐬𝐢𝐭𝐞 𝐢𝐬𝐧'𝐭 𝐟𝐢𝐧𝐢𝐬𝐡𝐞𝐝 𝐚𝐟𝐭𝐞𝐫 𝐥𝐚𝐮𝐧𝐜𝐡. 𝐈𝐭'𝐬 𝐣𝐮𝐬𝐭 𝐠𝐞𝐭𝐭𝐢𝐧𝐠 𝐬𝐭𝐚𝐫𝐭𝐞𝐝.
That's a lesson I learned early in my career, and it's one I still see business owners miss all the time.

𝐓𝐡𝐞 𝐩𝐫𝐨𝐛𝐥𝐞𝐦:
A new website gets launched. Everyone celebrates. Then it gets left alone.
No updates. No monitoring. No backups. No one checking if it's still fast or secure. Six months later, something breaks. Or worse, the site gets hacked and nobody notices for weeks.

𝐖𝐡𝐲 𝐭𝐡𝐢𝐬 𝐡𝐚𝐩𝐩𝐞𝐧𝐬:
I think it comes down to how websites are often sold and thought about.
A website gets treated like a one-time project instead of an ongoing part of the business. But a website is closer to a car than a piece of furniture. It needs regular attention to keep running well.

WordPress core, themes, and plugins get updated constantly. Some updates fix security holes. Some fix bugs. Some improve performance. If nothing gets updated, small issues quietly pile up until something breaks all at once.

𝐖𝐡𝐚𝐭 𝐚𝐜𝐭𝐮𝐚𝐥𝐥𝐲 𝐡𝐞𝐥𝐩𝐬
1- A simple monthly routine solves most of this:
2- Check for core, theme, and plugin updates.
3- Run a backup before updating anything.
4- Test the site after updates to make sure nothing broke.
5- Monitor uptime and loading speed.
6- Review security logs for anything unusual.

None of this is complicated. It just needs to be consistent. The businesses I've seen avoid major website problems aren't the ones with the fanciest websites. They're the ones who treat maintenance as part of running the business, not an afterthought.

𝐓𝐡𝐞 𝐭𝐚𝐤𝐞𝐚𝐰𝐚𝐲
Launching a website is the beginning of its lifecycle, not the end. The businesses that stay ahead are the ones who keep checking in, even when nothing seems wrong.

Have you checked your website recently?

𝐖𝐡𝐞𝐧 𝐭𝐡𝐞 𝐪𝐮𝐞𝐮𝐞 𝐰𝐨𝐫𝐤𝐞𝐫 𝐈 "𝐟𝐢𝐧𝐢𝐬𝐡𝐞𝐝" 𝐭𝐡𝐫𝐞𝐞 𝐰𝐞𝐞𝐤𝐬 𝐚𝐠𝐨 𝐜𝐚𝐦𝐞 𝐛𝐚𝐜𝐤 𝐭𝐨 𝐡𝐚𝐮𝐧𝐭 𝐦𝐞We had a Laravel queue worker handling some back...
05/06/2026

𝐖𝐡𝐞𝐧 𝐭𝐡𝐞 𝐪𝐮𝐞𝐮𝐞 𝐰𝐨𝐫𝐤𝐞𝐫 𝐈 "𝐟𝐢𝐧𝐢𝐬𝐡𝐞𝐝" 𝐭𝐡𝐫𝐞𝐞 𝐰𝐞𝐞𝐤𝐬 𝐚𝐠𝐨 𝐜𝐚𝐦𝐞 𝐛𝐚𝐜𝐤 𝐭𝐨 𝐡𝐚𝐮𝐧𝐭 𝐦𝐞
We had a Laravel queue worker handling some background sync jobs for a client project. Worked fine during testing, shipped it, moved on. The usual.

About three weeks later the client pings us some data on their dashboard looked stale. I dig in. Turns out some jobs had been failing silently since around day four. No retry logic, no dead letter queue, no alerts.

Just gone. The worker was running, the jobs were dispatching, but a third-party API we integrated had started returning a slightly different error format and our handler was swallowing exceptions without logging them properly.

The part that actually stings isn't that the bug existed it's that I knew when I shipped it that the error handling was thin. We were in a push, I told myself "we'll clean it up after go-live," and then of course that never happened.

Spent a good day replaying jobs, reconciling state manually, adding proper Horizon monitoring and a dead letter queue. All stuff that would've taken maybe two hours if I'd done it the first time.

The system's been stable since but I still think about that "we'll clean it up later" moment pretty often.

𝐃𝐨𝐮𝐛𝐥𝐞 𝐩𝐚𝐲𝐦𝐞𝐧𝐭𝐬 𝐰𝐞𝐫𝐞 𝐡𝐚𝐩𝐩𝐞𝐧𝐢𝐧𝐠 𝐢𝐧 𝐩𝐫𝐨𝐝𝐮𝐜𝐭𝐢𝐨𝐧. 𝐈𝐝𝐞𝐦𝐩𝐨𝐭𝐞𝐧𝐜𝐲 𝐤𝐞𝐲 𝐟𝐢𝐱𝐞𝐝 𝐢𝐭.This one took me a while to even reproduce consis...
20/05/2026

𝐃𝐨𝐮𝐛𝐥𝐞 𝐩𝐚𝐲𝐦𝐞𝐧𝐭𝐬 𝐰𝐞𝐫𝐞 𝐡𝐚𝐩𝐩𝐞𝐧𝐢𝐧𝐠 𝐢𝐧 𝐩𝐫𝐨𝐝𝐮𝐜𝐭𝐢𝐨𝐧. 𝐈𝐝𝐞𝐦𝐩𝐨𝐭𝐞𝐧𝐜𝐲 𝐤𝐞𝐲 𝐟𝐢𝐱𝐞𝐝 𝐢𝐭.
This one took me a while to even reproduce consistently. Users were getting charged twice. Not every time, just occasionally. The client was already getting complaints and had manually refunded a few transactions before it even reached me.

First instinct was to look at the frontend maybe the submit button was firing twice. Disabled it after first click, deployed, watched it. Still happened.
Then I started looking at the actual payment logs in Stripe. Some charges had the exact same amount, same card, within a second or two of each other. That told me it wasn't the button. Something on the backend was sending the request twice.

Dug into the Laravel code and found it. The payment controller had a retry wrapper around the Stripe API call added at some point to handle network timeouts. So if Stripe took more than a few seconds to respond, it would retry. But Stripe had already processed the first request. It just hadn't responded in time.

The fix was adding an idempotency key to every Stripe charge request. You generate a unique key per transaction we used the order ID combined with a hash and pass it in the request header. If Stripe receives two requests with the same key, it treats them as one and returns the original response instead of creating a new charge.

After deploying that, the double charges stopped completely. The retry logic itself wasn't wrong. Network timeouts happen. The problem was retrying without telling Stripe it was a retry.

Address

D-Ground People Colony
Faisalabad
36300

Alerts

Be the first to know and let us send you an email when Umar Draz posts news and promotions. Your email address will not be used for any other purpose, and you can unsubscribe at any time.

Shortcuts

Share

Category