<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
<channel>
<title>Coder Legion - Recent posts tagged developer-stories</title>
<link>https://coderlegion.com/tag/developer-stories</link>
<description>Powered by Question2Answer</description>
<item>
<title>Kevin Martinez on Building, Learning &amp; Growing as a Developer From Ideas to Impact</title>
<link>https://coderlegion.com/29907/kevin-martinez-on-building-learning-growing-as-a-developer-from-ideas-to-impact</link>
<description>&lt;p&gt;In this Developer Spotlight, &lt;strong&gt;Tom Smith&lt;/strong&gt; sits down with &lt;strong&gt;Kevin Martinez&lt;/strong&gt; for a relaxed conversation about his journey as a developer, his experiences, and the perspectives he has gained along the way.&lt;/p&gt;
&lt;p&gt;No scripted success story. No corporate pitch. Just two developers having a real conversation about the journey behind the work.&lt;/p&gt;
&lt;h3 id=&quot;-watch-the-developer-spotlight&quot;&gt;🎥 Watch the Developer Spotlight&lt;/h3&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://www.youtube.com/watch?v=Wtopo3zkIkE&quot;&gt;Watch the full conversation on YouTube&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&quot;meet-kevin-martinez&quot;&gt;Meet Kevin Martinez&lt;/h3&gt;
&lt;p&gt;Kevin Martinez joins Tom for this Developer Spotlight to share his experiences and perspective as a developer.&lt;/p&gt;
&lt;p&gt;The conversation offers a chance to hear directly from Kevin about his journey, the experiences that have shaped him, and the lessons he has picked up along the way.&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://coderlegion.com/user/Kevin+Martinez&quot;&gt;View Kevin Martinez's CoderLegion profile&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&quot;a-conversation-about-the-developer-journey&quot;&gt;A Conversation About the Developer Journey&lt;/h3&gt;
&lt;p&gt;Developer journeys rarely follow a straight line.&lt;/p&gt;
&lt;p&gt;Behind every developer are years of learning, experimenting, solving problems, making mistakes, changing direction, and discovering what kind of work they genuinely enjoy.&lt;/p&gt;
&lt;p&gt;In this conversation, Tom and Kevin take a relaxed approach to exploring that journey — sharing experiences, perspectives, and the realities behind being a developer.&lt;/p&gt;
&lt;p&gt;Watch the full conversation above and hear Kevin's story in his own words.&lt;/p&gt;
&lt;h3 id=&quot;meet-the-host-tom-smith&quot;&gt;Meet the Host: Tom Smith&lt;/h3&gt;
&lt;p&gt;Tom Smith is a member of the CoderLegion community and the host of our Developer Spotlight conversations.&lt;/p&gt;
&lt;p&gt;Through these conversations, Tom gives developers an opportunity to share their experiences in a relaxed and authentic format — with the developer and their story remaining at the centre of the discussion.&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://coderlegion.com/user/Tom+Smith&quot;&gt;View Tom Smith's CoderLegion profile&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&quot;why-we-re-starting-video-discussion-stories&quot;&gt;Why We're Starting Video Discussion Stories&lt;/h3&gt;
&lt;p&gt;Written Developer Stories give developers a place to tell their stories through words.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Video Discussion Stories&lt;/strong&gt; add something different: a real conversation.&lt;/p&gt;
&lt;p&gt;There are no scripted success stories and no requirement to present a perfect career journey. Developers can simply talk about their experiences, the things they've learned, the challenges they've faced, and the work they're passionate about.&lt;/p&gt;
&lt;p&gt;The goal is simple:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Real developers. Real journeys. Real conversations.&lt;/strong&gt;&lt;/p&gt;
&lt;h3 id=&quot;developer-spotlight-at-coderlegion&quot;&gt;Developer Spotlight at CoderLegion&lt;/h3&gt;
&lt;p&gt;Developer Spotlight is part of the &lt;strong&gt;CoderLegion Developer Stories&lt;/strong&gt; series, created to give members of the developer community a platform to share their experiences in their own words.&lt;/p&gt;
&lt;p&gt;Each conversation brings together a community host and a developer guest, creating an opportunity to learn from the people behind the code.&lt;/p&gt;
&lt;h3 id=&quot;want-to-take-part-&quot;&gt;Want to Take Part?&lt;/h3&gt;
&lt;p&gt;Would you like to share your own developer journey with the CoderLegion community?&lt;/p&gt;
&lt;p&gt;We're looking for developers with different backgrounds, experiences, interests, and perspectives.&lt;/p&gt;
&lt;p&gt;You don't need to have a perfect success story.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Your journey is the story.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;If you'd like to take part in a future Developer Spotlight or Developer Story, reach out to the CoderLegion team.&lt;/p&gt;
&lt;h3 id=&quot;about-kevin-martinez&quot;&gt;About Kevin Martinez&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Kevin Martinez&lt;/strong&gt; is a member of the CoderLegion developer community.&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://coderlegion.com/user/Kevin+Martinez&quot;&gt;View Kevin Martinez's profile on CoderLegion&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&quot;about-tom-smith&quot;&gt;About Tom Smith&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Tom Smith&lt;/strong&gt; is a member of the CoderLegion community and host of the Developer Spotlight series.&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://coderlegion.com/user/Tom+Smith&quot;&gt;View Tom Smith's profile on CoderLegion&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id=&quot;coderlegion-developer-stories&quot;&gt;CoderLegion Developer Stories&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Developer Stories&lt;/strong&gt; is where CoderLegion members share the experiences, lessons, ideas, projects, and journeys behind their work.&lt;/p&gt;
&lt;p&gt;Written stories. Video conversations. Real developers.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Real developers. Real journeys. Real conversations.&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;Guest:&lt;/strong&gt; Kevin Martinez&lt;br&gt;
&lt;strong&gt;Host:&lt;/strong&gt; Tom Smith&lt;br&gt;
&lt;strong&gt;Series:&lt;/strong&gt; CoderLegion Developer Spotlight&lt;br&gt;
&lt;strong&gt;Format:&lt;/strong&gt; Video Discussion Story&lt;/p&gt;
</description>
<category>Dev Stories</category>
<guid isPermaLink="true">https://coderlegion.com/29907/kevin-martinez-on-building-learning-growing-as-a-developer-from-ideas-to-impact</guid>
<pubDate>Mon, 05 Oct 2026 20:09:46 +0000</pubDate>
</item>
<item>
<title>From Retrenchment to Full-Stack Developer: Wade Thomas on Learning, Simplicity and Building Software</title>
<link>https://coderlegion.com/25749/from-retrenchment-full-stack-developer-wade-thomas-learning-simplicity-building-software</link>
<description>&lt;h2 id=&quot;from-retrenchment-to-full-stack-developer-wade-thomas-on-learning-simplicity-and-building-software-that-matters&quot;&gt;From Retrenchment to Full-Stack Developer: Wade Thomas on Learning, Simplicity and Building Software That Matters&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Developer Stories | CoderLegion&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;What happens when a career change forces you to rethink your future?&lt;/p&gt;
&lt;p&gt;For Wade Alister Thomas, the answer was to turn a difficult setback into the beginning of a completely different career.&lt;/p&gt;
&lt;p&gt;After spending 18 years working in the telecommunications industry, Wade was among approximately 500 employees who were retrenched in November 2018. He had recently started a family and finished building his home, so the timing could hardly have been more challenging.&lt;/p&gt;
&lt;p&gt;At that point, Wade had a decision to make: look for another traditional job or take the small coding projects he had been doing on the side and turn them into a full-time career.&lt;/p&gt;
&lt;p&gt;He chose the second path.&lt;/p&gt;
&lt;p&gt;Today, Wade is a self-taught full-stack developer and consultant based in Trinidad &amp;amp; Tobago. His preferred stack includes TanStack Start, Tailwind CSS and shadcn/ui on the frontend, with Directus, PostgreSQL and Redis running on a VPS through Coolify.&lt;/p&gt;
&lt;p&gt;He also works with businesses on their digital presence, builds applications, creates logos and Git templates, and regularly shares what he learns through technical articles.&lt;/p&gt;
&lt;p&gt;In this Developer Stories interview, Wade talks about his journey from telecommunications to software development, the challenges of learning without a traditional curriculum, why he prefers simple and sustainable architectures, what attracted him to self-hosting, and why developers should focus on solving business problems rather than simply using the newest technology.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;from-2014-to-2018-when-a-career-changed-direction&quot;&gt;From 2014 to 2018: When a Career Changed Direction&lt;/h3&gt;
&lt;p&gt;Wade started coding in 2014, initially taking on small projects for friends and family.&lt;/p&gt;
&lt;p&gt;At the time, however, software development was still something he was doing alongside his full-time career in telecommunications.&lt;/p&gt;
&lt;p&gt;That changed in 2018.&lt;/p&gt;
&lt;p&gt;About 500 employees at the telecommunications company were retrenched on November 15, 2018, and Wade was among them.&lt;/p&gt;
&lt;p&gt;It was a particularly difficult period because he had recently started a family and had just finished building his home.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&quot;It was a really difficult time, as I had started a family and just finished building our home.&quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;After 18 years in telecommunications, Wade had to decide whether to look for another traditional job or pursue the coding work he had already started doing on the side.&lt;/p&gt;
&lt;p&gt;With the support of his wife and after much prayer, he decided to pursue software development full-time.&lt;/p&gt;
&lt;p&gt;That decision marked the beginning of a completely different professional journey.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;the-challenge-of-being-a-self-taught-developer&quot;&gt;The Challenge of Being a Self-Taught Developer&lt;/h3&gt;
&lt;p&gt;Being self-taught gave Wade freedom, but it also created one of the biggest challenges many independent developers face: deciding what to learn.&lt;/p&gt;
&lt;p&gt;There was no university curriculum, mentor or structured program telling him which technology to choose next.&lt;/p&gt;
&lt;p&gt;He initially enrolled with Treehouse but eventually had to stop because he could not afford the monthly subscription.&lt;/p&gt;
&lt;p&gt;He began learning JavaScript, HTML and CSS, purchasing discounted courses on Udemy and experimenting with different technologies.&lt;/p&gt;
&lt;p&gt;Eventually, he realized that knowing frontend technologies alone wasn't enough.&lt;/p&gt;
&lt;p&gt;He needed to understand backend development as well.&lt;/p&gt;
&lt;p&gt;The problem was that there was nobody to point him toward a specific path.&lt;/p&gt;
&lt;p&gt;Before AI made technical research much easier, Wade had to search through the internet himself, experiment, make mistakes and figure things out through trial and error.&lt;/p&gt;
&lt;p&gt;He eventually settled on React for the frontend and Node/Express for the backend.&lt;/p&gt;
&lt;p&gt;But the experimentation didn't stop there.&lt;/p&gt;
&lt;p&gt;He explored Vue.js, returned to React, and tried several frameworks including Next.js, Remix, Redwood and TanStack.&lt;/p&gt;
&lt;p&gt;Then came another area of exploration: headless CMS platforms.&lt;/p&gt;
&lt;p&gt;He experimented with Contentful, Strapi, DatoCMS, Sanity, Storyblok, Prismic, Payload and eventually Directus.&lt;/p&gt;
&lt;p&gt;Looking back, Wade says deciding what to learn and sticking with it was a major struggle.&lt;/p&gt;
&lt;p&gt;What eventually helped was finding a technology stack with a manageable learning curve and, more importantly, enjoying the process of learning.&lt;/p&gt;
&lt;p&gt;The motivation shifted from simply trying to reach an outcome to genuinely enjoying the journey.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;finding-a-stack-that-works&quot;&gt;Finding a Stack That Works&lt;/h3&gt;
&lt;p&gt;Wade's current technology stack didn't appear overnight.&lt;/p&gt;
&lt;p&gt;It evolved through real client work and the practical problems that came with building software as a solo developer.&lt;/p&gt;
&lt;p&gt;His first paying client was a travel agency.&lt;/p&gt;
&lt;p&gt;At the time, Wade was using React on the frontend and Node/Express on the backend.&lt;/p&gt;
&lt;p&gt;That meant manually building many of the pieces required by the application, including forms, APIs and database functionality.&lt;/p&gt;
&lt;p&gt;The workload was significant.&lt;/p&gt;
&lt;p&gt;He didn't meet the original delivery date, although he ultimately delivered a working product.&lt;/p&gt;
&lt;p&gt;That experience taught him something important about working as a solo developer: the technology stack itself can have a major impact on how quickly and sustainably you can deliver.&lt;/p&gt;
&lt;p&gt;Instead of simply accepting the complexity, Wade began researching alternatives.&lt;/p&gt;
&lt;p&gt;He wanted technologies that worked well together and allowed him to spend more time building the actual application instead of repeatedly wiring infrastructure together.&lt;/p&gt;
&lt;p&gt;His current approach focuses on technologies including:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;TanStack Start&lt;/li&gt;
&lt;li&gt;Tailwind CSS&lt;/li&gt;
&lt;li&gt;shadcn/ui&lt;/li&gt;
&lt;li&gt;Directus&lt;/li&gt;
&lt;li&gt;PostgreSQL&lt;/li&gt;
&lt;li&gt;Redis&lt;/li&gt;
&lt;li&gt;VPS infrastructure&lt;/li&gt;
&lt;li&gt;Coolify&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The goal isn't to use the most impressive stack possible.&lt;/p&gt;
&lt;p&gt;It is to use a stack that works well for the types of clients he serves.&lt;/p&gt;
&lt;p&gt;Because Wade primarily works with startups and small-to-medium businesses, he doesn't believe every project needs an enterprise-level architecture.&lt;/p&gt;
&lt;p&gt;Instead, he looks for solutions that are affordable, sustainable and fast to deliver.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;why-wade-chose-self-hosting&quot;&gt;Why Wade Chose Self-Hosting&lt;/h3&gt;
&lt;p&gt;Many developers today immediately reach for managed platforms such as Vercel or Netlify.&lt;/p&gt;
&lt;p&gt;Wade took a different route.&lt;/p&gt;
&lt;p&gt;He initially used Netlify for some of his projects, but eventually became frustrated with aspects of the platform, including pricing, DNS management and deployment errors that weren't always intuitive.&lt;/p&gt;
&lt;p&gt;The possibility of unpredictable hosting costs also made him cautious about some managed platforms.&lt;/p&gt;
&lt;p&gt;Self-hosting offered a different model.&lt;/p&gt;
&lt;p&gt;With a VPS and Coolify, Wade could control the hosting environment while still keeping much of the convenience developers expect from modern deployment platforms.&lt;/p&gt;
&lt;p&gt;He could create subdomains, automatically manage SSL certificates, run frontend and backend applications on the same server, and deploy directly from GitHub.&lt;/p&gt;
&lt;p&gt;For the types of businesses he works with, this provided a practical balance between flexibility, cost and simplicity.&lt;/p&gt;
&lt;p&gt;But Wade sees another important benefit to self-hosting.&lt;/p&gt;
&lt;p&gt;It forces developers to understand what actually happens when an application runs in production.&lt;/p&gt;
&lt;p&gt;You have to understand the server, deployment process, database and infrastructure.&lt;/p&gt;
&lt;p&gt;That knowledge can be valuable even when working with managed platforms.&lt;/p&gt;
&lt;p&gt;For Wade, predictable costs are another major advantage.&lt;/p&gt;
&lt;p&gt;Instead of worrying that an unexpected traffic spike or usage metric could suddenly increase a hosting bill, he knows what infrastructure he is paying for.&lt;/p&gt;
&lt;p&gt;Self-hosting also reduces dependence on a particular provider's pricing and platform rules.&lt;/p&gt;
&lt;p&gt;At the same time, Coolify provides many of the conveniences developers appreciate from managed platforms while allowing Wade to retain control over his infrastructure.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;why-directus-became-an-important-part-of-his-stack&quot;&gt;Why Directus Became an Important Part of His Stack&lt;/h3&gt;
&lt;p&gt;Before using Directus, Wade built backend systems using Node/Express.&lt;/p&gt;
&lt;p&gt;That meant creating APIs, middleware, authentication and authorization himself.&lt;/p&gt;
&lt;p&gt;For a solo developer, that can add a considerable amount of work to every project.&lt;/p&gt;
&lt;p&gt;Directus changed that equation.&lt;/p&gt;
&lt;p&gt;With Directus, Wade could quickly create a backend and automatically expose APIs through REST, GraphQL or the SDK.&lt;/p&gt;
&lt;p&gt;The platform also provides a data studio that allows clients and non-developers to manage their own data.&lt;/p&gt;
&lt;p&gt;Authentication is available out of the box, and Directus can connect to existing SQL databases.&lt;/p&gt;
&lt;p&gt;For Wade, this makes Directus particularly useful for content-driven websites and fast-turnaround MVPs where speed and a client-friendly data management experience are important.&lt;/p&gt;
&lt;p&gt;It also fits naturally into his self-hosting approach.&lt;/p&gt;
&lt;p&gt;However, Wade doesn't see Directus as the answer to every backend problem.&lt;/p&gt;
&lt;p&gt;For applications with highly complex business logic, he believes a custom backend can still be the better choice.&lt;/p&gt;
&lt;p&gt;That distinction is important.&lt;/p&gt;
&lt;p&gt;The goal isn't to find one technology that solves every problem.&lt;/p&gt;
&lt;p&gt;The goal is to choose the right level of complexity for the problem being solved.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;when-simplicity-becomes-an-architecture-principle&quot;&gt;When Simplicity Becomes an Architecture Principle&lt;/h3&gt;
&lt;p&gt;One of the strongest themes in Wade's approach to development is simplicity.&lt;/p&gt;
&lt;p&gt;Developers can easily become distracted by the desire to build something technically impressive.&lt;/p&gt;
&lt;p&gt;Modern frameworks, animations, advanced architectures and new technologies can all be exciting.&lt;/p&gt;
&lt;p&gt;But they can also distract from the actual purpose of a product.&lt;/p&gt;
&lt;p&gt;Wade believes in launching a minimum viable product, keeping the initial implementation focused and adding complexity only when it becomes necessary.&lt;/p&gt;
&lt;p&gt;Complexity has a cost.&lt;/p&gt;
&lt;p&gt;It can increase:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Bugs&lt;/li&gt;
&lt;li&gt;Development time&lt;/li&gt;
&lt;li&gt;Testing requirements&lt;/li&gt;
&lt;li&gt;Maintenance work&lt;/li&gt;
&lt;li&gt;Project costs&lt;/li&gt;
&lt;li&gt;Time required to get customer feedback&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;He experienced this mindset firsthand while building his own portfolio.&lt;/p&gt;
&lt;p&gt;His initial idea was to create an impressive interactive website with transitions, parallax scrolling, dark mode, 3D images and animations.&lt;/p&gt;
&lt;p&gt;Instead, he stepped back and asked what the portfolio actually needed to accomplish.&lt;/p&gt;
&lt;p&gt;The purpose was simple: convince a potential client that he could build software that solved real-world problems.&lt;/p&gt;
&lt;p&gt;So he created a much simpler interface and focused on examples of applications he had built.&lt;/p&gt;
&lt;p&gt;The result was a faster launch and a clearer demonstration of his actual capabilities.&lt;/p&gt;
&lt;p&gt;The lesson was simple:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A product doesn't need to demonstrate everything a developer knows. It needs to solve the problem it was created to solve.&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;from-developer-to-consultant&quot;&gt;From Developer to Consultant&lt;/h3&gt;
&lt;p&gt;Working directly with clients changed Wade's understanding of software development.&lt;/p&gt;
&lt;p&gt;As a developer, it's easy to focus primarily on code.&lt;/p&gt;
&lt;p&gt;But clients aren't usually buying code.&lt;/p&gt;
&lt;p&gt;They're buying a solution to a business problem.&lt;/p&gt;
&lt;p&gt;Wade learned that understanding the client's industry, customers and business goals is just as important as understanding the technology.&lt;/p&gt;
&lt;p&gt;A web application is often not the business itself.&lt;/p&gt;
&lt;p&gt;Instead, it becomes a tool that helps the business compete, communicate with customers or operate more effectively.&lt;/p&gt;
&lt;p&gt;That means technology decisions should follow business requirements rather than dictate them.&lt;/p&gt;
&lt;p&gt;Wade puts it simply:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&quot;The technology must serve the solution, not the other way around.&quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This also means that the technically superior solution isn't always the right solution.&lt;/p&gt;
&lt;p&gt;Sometimes the newest or most advanced technology is also the most expensive.&lt;/p&gt;
&lt;p&gt;If that cost doesn't make sense for the business, Wade would rather recommend a proven and affordable solution.&lt;/p&gt;
&lt;p&gt;The best architecture isn't necessarily the one with the most impressive technology.&lt;/p&gt;
&lt;p&gt;Sometimes it is the one that makes the most sense for the business.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;building-more-than-software&quot;&gt;Building More Than Software&lt;/h3&gt;
&lt;p&gt;Wade's work extends beyond writing code.&lt;/p&gt;
&lt;p&gt;He also works with UI/UX, ecommerce, performance, authentication, security, branding and logo design.&lt;/p&gt;
&lt;p&gt;For him, understanding the user is a critical part of building software.&lt;/p&gt;
&lt;p&gt;He gave the example of working with an ecommerce client selling natural self-care products.&lt;/p&gt;
&lt;p&gt;Rather than immediately starting with the interface, Wade became a customer himself.&lt;/p&gt;
&lt;p&gt;He bought and experienced the products, visited the client's pop-up events and observed the customers.&lt;/p&gt;
&lt;p&gt;That helped him understand the product, the customers and the image the business wanted to communicate.&lt;/p&gt;
&lt;p&gt;He could then use that understanding to shape the user interface and create a persona for the ideal customer.&lt;/p&gt;
&lt;p&gt;This reinforced an important lesson:&lt;/p&gt;
&lt;p&gt;A technically flawless application is not necessarily a successful product.&lt;/p&gt;
&lt;p&gt;If nobody wants to use it, the quality of the code doesn't matter nearly as much.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;why-wade-shares-what-he-learns&quot;&gt;Why Wade Shares What He Learns&lt;/h3&gt;
&lt;p&gt;Wade's development journey wasn't always easy.&lt;/p&gt;
&lt;p&gt;There were periods when he almost gave up.&lt;/p&gt;
&lt;p&gt;One of the challenges he faced was the cost of education and development resources, particularly because of currency conversion. At one point, the exchange rate made many courses difficult to afford.&lt;/p&gt;
&lt;p&gt;He also remembers a time before AI made technical research much easier.&lt;/p&gt;
&lt;p&gt;Finding reliable information required significant searching and experimentation.&lt;/p&gt;
&lt;p&gt;That experience influenced the way Wade approaches sharing knowledge today.&lt;/p&gt;
&lt;p&gt;His goal is straightforward:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Share the tools he uses, explain why he uses them, and show others how to use them.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;He wants to make the learning curve easier for someone who might be considering web development as a career path.&lt;/p&gt;
&lt;p&gt;There are now countless frameworks, platforms and tools available, and that abundance can itself become overwhelming.&lt;/p&gt;
&lt;p&gt;Wade wants his content to help developers make sense of those choices rather than simply telling them which technology is &quot;the best.&quot;&lt;/p&gt;
&lt;p&gt;Teaching has also improved his own understanding.&lt;/p&gt;
&lt;p&gt;Explaining a concept forces you to understand it more deeply.&lt;/p&gt;
&lt;p&gt;For Wade, documenting his learning has therefore become part of his own development process.&lt;/p&gt;
&lt;p&gt;The more he teaches, the better he understands the technologies he works with.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;advice-for-self-taught-developers&quot;&gt;Advice for Self-Taught Developers&lt;/h3&gt;
&lt;p&gt;For developers starting their journey today, Wade has a few practical recommendations.&lt;/p&gt;
&lt;p&gt;First, choose a programming language with a strong community and learn the fundamentals well.&lt;/p&gt;
&lt;p&gt;Don't make learning feel like a punishment.&lt;/p&gt;
&lt;p&gt;There will always be difficult periods, but there should also be some enjoyment in the process.&lt;/p&gt;
&lt;p&gt;Second, take advantage of the huge amount of free educational material available today.&lt;/p&gt;
&lt;p&gt;YouTube has become a valuable learning resource, and AI can also be used as a learning assistant.&lt;/p&gt;
&lt;p&gt;Wade recommends exhausting free resources before spending money on courses.&lt;/p&gt;
&lt;p&gt;Third, use development roadmaps.&lt;/p&gt;
&lt;p&gt;One of the biggest challenges he faced was not knowing what to learn next.&lt;/p&gt;
&lt;p&gt;Today, developers have access to many structured roadmaps that can provide direction.&lt;/p&gt;
&lt;p&gt;Perhaps most importantly, Wade recommends avoiding the temptation to become a jack of all trades.&lt;/p&gt;
&lt;p&gt;Find a technology stack you enjoy and become highly capable with it before constantly adding new technologies.&lt;/p&gt;
&lt;p&gt;Don't chase every new framework simply because it is popular.&lt;/p&gt;
&lt;p&gt;Change technologies when there is a real reason to do so and when the change genuinely improves your development process.&lt;/p&gt;
&lt;p&gt;And when building applications, focus on structure rather than obsessing over syntax.&lt;/p&gt;
&lt;p&gt;Before writing code, understand what you want to achieve.&lt;/p&gt;
&lt;p&gt;Break the application into components and understand how those components need to interact.&lt;/p&gt;
&lt;p&gt;Then start writing the code.&lt;/p&gt;
&lt;p&gt;As Wade puts it, understanding structure can eliminate many of the problems that inexperienced developers encounter.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;a-journey-built-on-learning-and-purpose&quot;&gt;A Journey Built on Learning and Purpose&lt;/h3&gt;
&lt;p&gt;Wade's journey from telecommunications to full-stack development wasn't planned in a traditional way.&lt;/p&gt;
&lt;p&gt;It began with small coding projects, continued through a difficult career transition, and developed through years of self-directed experimentation.&lt;/p&gt;
&lt;p&gt;Along the way, he learned that technology is only one part of software development.&lt;/p&gt;
&lt;p&gt;Choosing the right tools matters.&lt;/p&gt;
&lt;p&gt;Understanding infrastructure matters.&lt;/p&gt;
&lt;p&gt;Learning continuously matters.&lt;/p&gt;
&lt;p&gt;But understanding the business, the customer and the problem you're trying to solve may matter even more.&lt;/p&gt;
&lt;p&gt;His approach today reflects that experience: choose practical technologies, avoid unnecessary complexity, control infrastructure where it makes sense, understand the user and keep learning.&lt;/p&gt;
&lt;p&gt;For developers who feel overwhelmed by the constant stream of new frameworks and technologies, Wade's story offers a useful reminder:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;You don't need to learn everything. You need to learn enough to solve meaningful problems well.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;And perhaps his most personal piece of advice comes from the principle that has helped him throughout the journey:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&quot;As for my secret weapon — whenever I'm stuck looking for a solution, I pray.&quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id=&quot;about-wade-alister-thomas&quot;&gt;About Wade Alister Thomas&lt;/h3&gt;
&lt;p&gt;His coderlegion &lt;a rel=&quot;nofollow&quot; href=&quot;https://coderlegion.com/user/wadethomastt&quot;&gt;profile&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Wade Alister Thomas is a self-taught full-stack developer and consultant from Trinidad &amp;amp; Tobago.&lt;/p&gt;
&lt;p&gt;His preferred technology stack includes TanStack Start, Tailwind CSS, shadcn/ui, Directus, PostgreSQL, Redis and Coolify-managed VPS infrastructure.&lt;/p&gt;
&lt;p&gt;Through Northern Range Digital, he helps businesses establish their online presence and build digital products. He also creates logos and Git templates and regularly shares what he learns through technical articles and guides.&lt;/p&gt;
&lt;p&gt;You can learn more about Wade and his work through his CoderLegion profile and website.&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/25749/from-retrenchment-full-stack-developer-wade-thomas-learning-simplicity-building-software</guid>
<pubDate>Sat, 29 Aug 2026 09:12:49 +0000</pubDate>
</item>
<item>
<title>Developer Stories: Jaafar on Building Reliable Systems for Arabic Newsrooms</title>
<link>https://coderlegion.com/25201/developer-stories-jaafar-on-building-reliable-systems-for-arabic-newsrooms</link>
<description>&lt;h2 id=&quot;developer-stories-jaafar-on-building-reliable-systems-for-arabic-newsrooms&quot;&gt;Developer Stories: Jaafar on Building Reliable Systems for Arabic Newsrooms&lt;/h2&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;Developer Stories&lt;/strong&gt; is a CoderLegion series highlighting the real journeys, challenges, lessons, and experiences of developers building software in the real world.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;For this edition, we spoke with &lt;strong&gt;Jaafar&lt;/strong&gt;, founder of ManTek Technologies in Dubai, about his journey from studying IT engineering and AI at Damascus University to working with AWS, WordPress, and high-traffic publishing systems.&lt;/p&gt;
&lt;p&gt;Rather than focusing on a traditional career timeline, this conversation explores something developers often learn only through experience: &lt;strong&gt;the difference between systems that appear to work and systems that can actually be trusted.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;From silent failures and Arabic-language challenges to scaling WordPress and building NUZ, Jaafar shares lessons learned from working with production systems where mistakes can become visible to thousands—or millions—of users.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;from-damascus-university-to-mantek&quot;&gt;From Damascus University to ManTek&lt;/h3&gt;
&lt;p&gt;Jaafar studied IT engineering with a focus on AI, which he describes as involving a lot of statistics and not much of what he eventually ended up doing professionally.&lt;/p&gt;
&lt;p&gt;His path into technology and media took him to the UAE, where he joined &lt;strong&gt;Al Khaleej Newspaper&lt;/strong&gt;.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Publishing has a rhythm you do not appreciate from outside: it never pauses, the deadlines are real, and when something is slow or wrong it is wrong in public.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That experience led to work with a television channel in Dubai Media City, where the systems became considerably deeper and the scale considerably larger.&lt;/p&gt;
&lt;p&gt;AWS was already part of the technology stack when he arrived.&lt;/p&gt;
&lt;p&gt;Rather than learning cloud technology through tutorials or isolated projects, he learned it while working on systems carrying real traffic.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;AWS was already the stack when I arrived there, so I learned it the useful way, on a system that was already carrying real traffic.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;For Jaafar, that became one of the biggest additions to his career.&lt;/p&gt;
&lt;p&gt;WordPress came later, and interestingly, the reason wasn't primarily technical.&lt;/p&gt;
&lt;p&gt;Management had decided to move away from depending on in-house systems.&lt;/p&gt;
&lt;p&gt;Bespoke platforms can be expensive to build and maintain, while also creating a significant learning curve whenever a new developer joins the team.&lt;/p&gt;
&lt;p&gt;WordPress offered something different: a platform developers already knew and could extend.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;I think that reasoning is underrated.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Eventually, ManTek Technologies grew out of Jaafar having enough experience to be useful on his own, combined with a backlog of ideas he had been carrying around for years.&lt;/p&gt;
&lt;p&gt;At some point, building those ideas became more interesting than leaving them unbuilt.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;when-systems-fail-quietly&quot;&gt;When Systems Fail Quietly&lt;/h3&gt;
&lt;p&gt;One of the recurring themes in Jaafar's work is &lt;strong&gt;silent failure&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;A system that crashes is usually obvious.&lt;/p&gt;
&lt;p&gt;A system that confidently gives you the wrong answer can be much more dangerous.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Because a failing check tells you it failed. A blind one hands you a clean, confident, wrong answer and lets you act on it.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;One example came while auditing structured data on his own website.&lt;/p&gt;
&lt;p&gt;A profile URL appeared to be returning a &quot;Page not found&quot; response. After checking it in a real browser and running automated checks for common bot-blocking behaviour, everything appeared normal.&lt;/p&gt;
&lt;p&gt;So he removed the URL from twenty-two pages and began preparing the commit message.&lt;/p&gt;
&lt;p&gt;Then he discovered the problem.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The profile actually existed.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The platform was simply serving logged-out visitors a page saying that it did not.&lt;/p&gt;
&lt;p&gt;Nothing had timed out. Nothing had crashed. The check had not reported an error.&lt;/p&gt;
&lt;p&gt;It had accurately reported the page it had been given—even though that page itself was misleading.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;The instrument had not errored. It had truthfully reported on the page it was given, which happened to be a page about not finding things.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Once he recognised the pattern, he found five more examples in the same week.&lt;/p&gt;
&lt;p&gt;There was an API field answering a different question than the one he intended to ask. A list endpoint disagreed with its own item endpoint. An analytics beacon could not be detected with &lt;code&gt;curl&lt;/code&gt; for two independent reasons.&lt;/p&gt;
&lt;p&gt;There were also editors that accepted a save and appeared to complete the operation while nothing actually reached disk.&lt;/p&gt;
&lt;p&gt;That last failure was particularly painful.&lt;/p&gt;
&lt;p&gt;A fully reviewed Arabic translation—forty-eight changed lines—existed nowhere except inside a browser tab.&lt;/p&gt;
&lt;p&gt;The important lesson wasn't that these problems were technically difficult.&lt;/p&gt;
&lt;p&gt;They weren't.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;The danger is not that these are hard to fix. Every one was trivial to fix. The danger is that nothing asks you to look.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://www.mantek.io/insights/the-404-that-wasnt&quot;&gt;The 404 That Wasn't&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;building-for-arabic&quot;&gt;Building for Arabic&lt;/h3&gt;
&lt;p&gt;One of the biggest challenges developers can underestimate when building for Arabic is that many assumptions in software were never explicitly written down.&lt;/p&gt;
&lt;p&gt;That means when those assumptions break, the system may not necessarily tell you.&lt;/p&gt;
&lt;p&gt;Jaafar highlights several examples.&lt;/p&gt;
&lt;h4 id=&quot;arabic-urls-and-byte-limits&quot;&gt;Arabic URLs and Byte Limits&lt;/h4&gt;
&lt;p&gt;WordPress caps a new URL slug at 200 &lt;strong&gt;bytes&lt;/strong&gt; in core through &lt;code&gt;utf8_uri_encode( $title, 200 )&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;For English, that budget roughly corresponds to 200 characters.&lt;/p&gt;
&lt;p&gt;Arabic is different.&lt;/p&gt;
&lt;p&gt;Because Arabic characters can require approximately six bytes after percent-encoding, the same limit can translate to roughly thirty-two characters.&lt;/p&gt;
&lt;p&gt;A normal Arabic headline can exceed that easily.&lt;/p&gt;
&lt;p&gt;The result can be a URL silently truncated in the middle of a word.&lt;/p&gt;
&lt;p&gt;Even more concerning, this can affect URLs that have already been published.&lt;/p&gt;
&lt;h4 id=&quot;search&quot;&gt;Search&lt;/h4&gt;
&lt;p&gt;Arabic search introduces another class of problems.&lt;/p&gt;
&lt;p&gt;WordPress search uses &lt;code&gt;LIKE '%term%'&lt;/code&gt; over the post table, comparing raw bytes.&lt;/p&gt;
&lt;p&gt;But Arabic contains optional diacritics, multiple written forms of letters such as alef and hamza, and characters such as &lt;strong&gt;tatweel&lt;/strong&gt;, which can stretch a word without changing its meaning to a reader.&lt;/p&gt;
&lt;p&gt;On a real archive containing 250,000 articles, Jaafar compared a search for:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;مُحَمَّد&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;The results were striking:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;&lt;th&gt;Search across 250,000 articles  &lt;/th&gt;&lt;th&gt;   Results &lt;/th&gt;&lt;th&gt;  Time&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;WordPress                       &lt;/td&gt;&lt;td&gt;     &lt;strong&gt;1&lt;/strong&gt; &lt;/td&gt;&lt;td&gt; 4.8 s&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;With normalisation and an index &lt;/td&gt;&lt;td&gt;&lt;strong&gt;28,238&lt;/strong&gt; &lt;/td&gt;&lt;td&gt;0.55 s&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;One result instead of more than twenty-eight thousand.&lt;/p&gt;
&lt;p&gt;And again, there was no obvious error.&lt;/p&gt;
&lt;p&gt;The editors experiencing the problem didn't necessarily report that search was broken.&lt;/p&gt;
&lt;p&gt;They reported that it was slow.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Slow is the part you can feel.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4 id=&quot;rendering-arabic&quot;&gt;Rendering Arabic&lt;/h4&gt;
&lt;p&gt;The challenges don't stop at encoding and search.&lt;/p&gt;
&lt;p&gt;Jaafar also encountered an issue while generating images containing Arabic text.&lt;/p&gt;
&lt;p&gt;He kept anchoring the text to the wrong edge.&lt;/p&gt;
&lt;p&gt;The relevant attribute was &lt;code&gt;text-anchor&lt;/code&gt;, where &lt;code&gt;start&lt;/code&gt; does not necessarily mean &quot;left&quot;. It means the start of the reading direction—which, for Arabic, is the right.&lt;/p&gt;
&lt;p&gt;The library was behaving correctly.&lt;/p&gt;
&lt;p&gt;His intuition was wrong.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;The general lesson: if you build for a language you do not read, your tests will share your assumptions. Test with real content from real users.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://www.mantek.io/insights/wordpress-arabic-search&quot;&gt;WordPress Arabic Search&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;scaling-wordpress&quot;&gt;Scaling WordPress&lt;/h3&gt;
&lt;p&gt;Jaafar has worked with genuinely large Arabic newsroom traffic, and his lessons about scaling WordPress are less about simply throwing more resources at the application.&lt;/p&gt;
&lt;p&gt;He identifies three major lessons.&lt;/p&gt;
&lt;h4 id=&quot;the-spike-is-rarely-the-interesting-problem&quot;&gt;The spike is rarely the interesting problem&lt;/h4&gt;
&lt;p&gt;A 20x traffic surge on a news story can sound terrifying.&lt;/p&gt;
&lt;p&gt;But much of that traffic consists of identical anonymous requests that can be handled by caching.&lt;/p&gt;
&lt;p&gt;The more interesting problems are the requests that &lt;strong&gt;cannot&lt;/strong&gt; be cached.&lt;/p&gt;
&lt;p&gt;Search.&lt;/p&gt;
&lt;p&gt;Logged-in editorial traffic.&lt;/p&gt;
&lt;p&gt;And the write path that still needs to publish content while everything else is happening.&lt;/p&gt;
&lt;p&gt;Jaafar also makes an important clarification about the often-mentioned 50,000 concurrent-user figure:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;It is load-tested, not an observed peak.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The test demonstrates that the cacheable path can hold up.&lt;/p&gt;
&lt;p&gt;It says much less about the newsroom itself—and the newsroom is the part that keeps you awake.&lt;/p&gt;
&lt;h4 id=&quot;background-jobs-fail-quietly&quot;&gt;Background jobs fail quietly&lt;/h4&gt;
&lt;p&gt;WordPress cron is another potential weak point.&lt;/p&gt;
&lt;p&gt;Because cron is triggered by traffic, putting WordPress behind a load balancer can result in cron running on every server simultaneously—or on none of them.&lt;/p&gt;
&lt;p&gt;Scheduled posts can fail to publish without necessarily producing an obvious alarm.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&quot;Nothing happened&quot; is not an event.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This is why one of Jaafar's open-source plugins elects a single cron runner across a fleet and raises an alert when it stalls.&lt;/p&gt;
&lt;h4 id=&quot;move-work-away-from-wordpress&quot;&gt;Move work away from WordPress&lt;/h4&gt;
&lt;p&gt;Media processing is a good example.&lt;/p&gt;
&lt;p&gt;Serving and resizing images directly from the application means the application is doing work that doesn't necessarily belong there.&lt;/p&gt;
&lt;p&gt;Moving that work to object storage and an edge layer means the origin server becomes less sensitive to traffic spikes.&lt;/p&gt;
&lt;p&gt;After five years of working with large-scale Arabic newsroom traffic, Jaafar sees a consistent pattern:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Uptime comes from having less of the system in the request path, not from tuning what is in it.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id=&quot;the-importance-of-observability&quot;&gt;The Importance of Observability&lt;/h3&gt;
&lt;p&gt;For Jaafar, observability is slightly different from simply having logging and monitoring.&lt;/p&gt;
&lt;p&gt;A system can have both and still fail silently.&lt;/p&gt;
&lt;p&gt;The question he cares about is:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Can a check distinguish &quot;this is fine&quot; from &quot;I cannot see this&quot;?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Many systems cannot.&lt;/p&gt;
&lt;p&gt;An uptime monitor hitting a homepage can tell you that the homepage renders.&lt;/p&gt;
&lt;p&gt;It cannot tell you whether scheduled posts were published, whether email actually left the system, or whether search returned the correct records.&lt;/p&gt;
&lt;p&gt;He experienced this distinction on his own website when two analytics counters for the same site and period disagreed by roughly two orders of magnitude.&lt;/p&gt;
&lt;p&gt;Neither system was broken.&lt;/p&gt;
&lt;p&gt;Neither was lying.&lt;/p&gt;
&lt;p&gt;They were simply answering different questions.&lt;/p&gt;
&lt;p&gt;One counted every request reaching the edge, including bots.&lt;/p&gt;
&lt;p&gt;The other counted browsers that actually executed the measurement script.&lt;/p&gt;
&lt;p&gt;Only one represented the number of people reading the site.&lt;/p&gt;
&lt;p&gt;Using the wrong number would have overstated readership by approximately eighty times.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Before you trust a number, know what it counts. That is observability too, and it is the part nobody writes runbooks for.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;His approach is therefore to alert on outcomes users would actually notice rather than simply monitoring whichever signal is easiest to collect.&lt;/p&gt;
&lt;p&gt;Failures should be loud by design.&lt;/p&gt;
&lt;p&gt;One of his plugins, for example, refuses to send mail when it is misconfigured rather than silently falling through to a transport that appears healthy but delivers nothing.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Refusing is friendlier than pretending.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id=&quot;open-source-and-real-world-problems&quot;&gt;Open Source and Real-World Problems&lt;/h3&gt;
&lt;p&gt;Jaafar has now released five open-source projects, each connected to the real-world problem that led to it.&lt;/p&gt;
&lt;p&gt;For him, the connection between the diagnosis and the fix is important.&lt;/p&gt;
&lt;p&gt;The fixes themselves are often small.&lt;/p&gt;
&lt;p&gt;For example, &lt;code&gt;wp-arabic-slug-schema-guard&lt;/code&gt; addresses the byte-budget problem around Arabic WordPress slugs.&lt;/p&gt;
&lt;p&gt;But the valuable part isn't just the code.&lt;/p&gt;
&lt;p&gt;It is understanding &lt;strong&gt;why&lt;/strong&gt; the problem exists.&lt;/p&gt;
&lt;p&gt;WordPress truncates at 200 bytes.&lt;/p&gt;
&lt;p&gt;Arabic can consume approximately six bytes per character.&lt;/p&gt;
&lt;p&gt;And published slugs can potentially be rewritten underneath an existing site.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;A fix without that context is a snippet nobody trusts. The context without a fix is a complaint. Publishing both together is the only version that is actually useful to the next person.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The plugins are deliberately implemented as must-use plugins rather than ordinary plugins.&lt;/p&gt;
&lt;p&gt;The reason is that infrastructure such as cron election and mail transport should not be something that can simply be switched off from an administrator screen.&lt;/p&gt;
&lt;p&gt;There was even a lesson in the packaging of the plugins themselves.&lt;/p&gt;
&lt;p&gt;Several plugins declared:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&quot;type&quot;: &quot;wordpress-muplugin&quot;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;so that Composer could install them into the correct directory.&lt;/p&gt;
&lt;p&gt;But two of them did so without requiring &lt;code&gt;composer/installers&lt;/code&gt;, the package responsible for interpreting that type.&lt;/p&gt;
&lt;p&gt;In projects that already included the dependency, everything worked.&lt;/p&gt;
&lt;p&gt;Elsewhere, Composer reported a successful installation but placed the plugin in &lt;code&gt;vendor/&lt;/code&gt;, where WordPress never loaded it.&lt;/p&gt;
&lt;p&gt;The installation succeeded.&lt;/p&gt;
&lt;p&gt;The plugin simply did nothing.&lt;/p&gt;
&lt;p&gt;Which was, ironically, exactly the kind of silent failure the plugins were designed to prevent.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;What I learned from releasing them: the environment is the bug, almost every time.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Across six rounds of adversarial testing on one of the projects, every bug discovered involved either a check that could not fail or a silent wrong answer.&lt;/p&gt;
&lt;p&gt;And none of those bugs were found simply by reading the code.&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/mantekio&quot;&gt;ManTek Technologies on GitHub&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;building-nuz&quot;&gt;Building NUZ&lt;/h3&gt;
&lt;p&gt;Jaafar is currently developing &lt;strong&gt;NUZ&lt;/strong&gt;, a cloud-native publishing platform aimed at high-traffic newsrooms.&lt;/p&gt;
&lt;p&gt;He is careful to clarify its current status:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;NUZ is pre-release. I am building the core, and there are no external partners on it yet.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That distinction matters.&lt;/p&gt;
&lt;p&gt;The project is not being presented as a platform already running with external partners. It is still being built.&lt;/p&gt;
&lt;p&gt;The problem NUZ is intended to address is the way many publishing platforms approach scale.&lt;/p&gt;
&lt;p&gt;A newsroom might begin with a CMS designed for a blog.&lt;/p&gt;
&lt;p&gt;Then caching is added.&lt;/p&gt;
&lt;p&gt;Then a CDN.&lt;/p&gt;
&lt;p&gt;Then a media pipeline.&lt;/p&gt;
&lt;p&gt;Then a search layer.&lt;/p&gt;
&lt;p&gt;Each addition introduces another component and another potential failure mode.&lt;/p&gt;
&lt;p&gt;Eventually, the newsroom is maintaining an architecture that nobody originally designed as a whole.&lt;/p&gt;
&lt;p&gt;NUZ starts from a different assumption:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;The traffic is spiky, the content is Arabic, and the editorial team publishes continuously while all of that is true.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id=&quot;engineering-in-the-real-world&quot;&gt;Engineering in the Real World&lt;/h3&gt;
&lt;p&gt;When working with production systems, clever solutions are not always the best solutions.&lt;/p&gt;
&lt;p&gt;Jaafar learned this through experience.&lt;/p&gt;
&lt;p&gt;One early fix involved copying a core function, changing one line, and shipping it.&lt;/p&gt;
&lt;p&gt;It worked.&lt;/p&gt;
&lt;p&gt;Then the underlying platform changed that function three times across three releases.&lt;/p&gt;
&lt;p&gt;His copy quietly diverged from the original implementation.&lt;/p&gt;
&lt;p&gt;Eventually, the bug that returned looked nothing like the problem he had originally fixed.&lt;/p&gt;
&lt;p&gt;The better solution was to use a documented filter and replace only the transport.&lt;/p&gt;
&lt;p&gt;No fork.&lt;/p&gt;
&lt;p&gt;No duplicated implementation.&lt;/p&gt;
&lt;p&gt;No code that needed to be kept in sync with the platform.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;When the platform gives you a seam, take the seam. Never fork.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The broader lesson is simple:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Prefer the boring integration point that the platform promises to keep working over the clever one that happens to work today.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id=&quot;advice-for-developers&quot;&gt;Advice for Developers&lt;/h3&gt;
&lt;p&gt;When asked what habit developers should develop to become better at building reliable systems, Jaafar offered a surprisingly simple answer.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;Before you accept that a check found nothing, point it at something you know is there.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The idea is straightforward.&lt;/p&gt;
&lt;p&gt;If you are checking whether a value appears in a file, first test the check against a file where you know the value exists.&lt;/p&gt;
&lt;p&gt;If you are verifying that a record is absent, first query a record you know exists.&lt;/p&gt;
&lt;p&gt;The goal is to establish that the check itself is capable of finding what it is supposed to find.&lt;/p&gt;
&lt;p&gt;Because sometimes the most dangerous result isn't an error.&lt;/p&gt;
&lt;p&gt;It is a perfectly clean &lt;strong&gt;&quot;nothing found.&quot;&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;final-thoughts&quot;&gt;Final Thoughts&lt;/h3&gt;
&lt;p&gt;Jaafar's journey is a good example of how real engineering experience is often built in places that tutorials don't cover.&lt;/p&gt;
&lt;p&gt;It is built in production systems.&lt;/p&gt;
&lt;p&gt;In traffic spikes.&lt;/p&gt;
&lt;p&gt;In unexpected platform behaviour.&lt;/p&gt;
&lt;p&gt;In multilingual content.&lt;/p&gt;
&lt;p&gt;In failed background jobs.&lt;/p&gt;
&lt;p&gt;In analytics numbers that answer the wrong question.&lt;/p&gt;
&lt;p&gt;And especially in the quiet failures that look like success.&lt;/p&gt;
&lt;p&gt;His approach is ultimately less about making systems look impressive and more about making them &lt;strong&gt;honest&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;A system should tell you when it doesn't know.&lt;/p&gt;
&lt;p&gt;A check should prove that it can actually see what it claims to see.&lt;/p&gt;
&lt;p&gt;And when a platform provides a supported way to extend it, use that instead of building something that will quietly drift away from the original system.&lt;/p&gt;
&lt;p&gt;For developers working with real users and real production systems, those lessons can be worth far more than another tutorial.&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id=&quot;about-developer-stories&quot;&gt;About Developer Stories&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Developer Stories&lt;/strong&gt; is a CoderLegion series featuring developers from our community and exploring the real journeys behind the code—the challenges they have faced, lessons they have learned, projects they are building, and experiences that can help other developers grow.&lt;/p&gt;
&lt;p&gt;If you have a developer journey, engineering lesson, project, or experience you'd like to share with the CoderLegion community, we'd love to hear from you.&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/25201/developer-stories-jaafar-on-building-reliable-systems-for-arabic-newsrooms</guid>
<pubDate>Mon, 24 Aug 2026 01:25:35 +0000</pubDate>
</item>
</channel>
</rss>