<?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>Forem: Nader</title>
    <description>The latest articles on Forem by Nader (@nader0913).</description>
    <link>https://forem.com/nader0913</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3768471%2F2e718ecb-1dd0-4da5-8dff-fa75039ee1b5.png</url>
      <title>Forem: Nader</title>
      <link>https://forem.com/nader0913</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/nader0913"/>
    <language>en</language>
    <item>
      <title>The AI Approval Process: Why Amazon's New Policy Matters for Every Dev Team</title>
      <dc:creator>Nader</dc:creator>
      <pubDate>Wed, 11 Mar 2026 06:27:38 +0000</pubDate>
      <link>https://forem.com/nader0913/the-ai-approval-process-why-amazons-new-policy-matters-for-every-dev-team-4cl2</link>
      <guid>https://forem.com/nader0913/the-ai-approval-process-why-amazons-new-policy-matters-for-every-dev-team-4cl2</guid>
      <description>&lt;p&gt;Amazon just made a significant change to their deployment process: senior engineers must now sign off on all AI-assisted code changes before they go to production. This comes after a series of outages linked to AI-generated modifications. But this isn't just an Amazon problem—it's a wake-up call for the entire industry.&lt;/p&gt;

&lt;p&gt;We've been living in the golden age of AI coding assistants. Tools like Copilot, Cursor, and Claude have revolutionized how we write code. They're fast, they're helpful, and they can churn out solutions in seconds. But speed without scrutiny is a recipe for disaster.&lt;/p&gt;

&lt;p&gt;The issue isn't that AI writes bad code—it's that AI writes &lt;em&gt;plausible&lt;/em&gt; code. Code that looks right at first glance but might miss edge cases, ignore security implications, or introduce subtle bugs that only surface under production load. Human developers make these mistakes too, but we've built decades of review processes around human work. We haven't yet adapted those processes for AI output.&lt;/p&gt;

&lt;p&gt;Amazon's policy is simple but powerful: require a senior engineer to review and approve any change that was substantially AI-generated. This creates accountability and ensures that experienced eyes verify the logic before it ships. It's not about distrusting AI—it's about treating AI-generated code with the same rigor we'd apply to code from a junior developer.&lt;/p&gt;

&lt;p&gt;For smaller teams, this might mean establishing clear guidelines: When is AI assistance appropriate? Who reviews AI-generated PRs? What level of testing is required? The key is intentionality. Use AI as a powerful tool, but never abdicate responsibility for what ships.&lt;/p&gt;

&lt;p&gt;The bottom line: AI makes us faster, but human judgment keeps us reliable. Amazon's policy isn't a step backward—it's a mature approach to leveraging AI while maintaining engineering excellence.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>aws</category>
      <category>codequality</category>
      <category>news</category>
    </item>
    <item>
      <title>Should Your AI Coding Session Be Part of the Git Commit?</title>
      <dc:creator>Nader</dc:creator>
      <pubDate>Mon, 02 Mar 2026 08:11:40 +0000</pubDate>
      <link>https://forem.com/nader0913/should-your-ai-coding-session-be-part-of-the-git-commit-5hhn</link>
      <guid>https://forem.com/nader0913/should-your-ai-coding-session-be-part-of-the-git-commit-5hhn</guid>
      <description>&lt;p&gt;The rise of AI-powered coding assistants has introduced a fascinating new question to our development workflow: if AI writes your code, should the conversation history be included in the commit?&lt;/p&gt;

&lt;p&gt;At first glance, it sounds absurd. We don't commit our Google searches or Stack Overflow browsing history. But AI-assisted coding is fundamentally different. The prompt engineering, the back-and-forth refinement, the edge cases you discussed—these aren't just research. They're part of the design process.&lt;/p&gt;

&lt;p&gt;Consider this: when reviewing a PR six months later, wouldn't it be valuable to see &lt;em&gt;why&lt;/em&gt; the developer chose a particular approach? With traditional code, we rely on commit messages and code comments. But AI sessions often contain rich context—the constraints discussed, alternatives considered, and reasoning behind implementation choices.&lt;/p&gt;

&lt;p&gt;Some developers are already experimenting with this. They're appending AI session summaries to commit messages or maintaining parallel documentation of significant AI interactions. Others argue it's noise—that code should speak for itself.&lt;/p&gt;

&lt;p&gt;The truth likely lies somewhere in between. Not every AI interaction deserves preservation, but pivotal architectural decisions made through AI collaboration might warrant documentation. Think of it like pair programming notes: you don't transcribe every word, but you capture the key insights.&lt;/p&gt;

&lt;p&gt;As AI becomes more integrated into our workflows, we'll need new conventions. Maybe a &lt;code&gt;.ai-sessions/&lt;/code&gt; directory? Commit message footers? Or perhaps IDE plugins that let you tag and archive significant interactions?&lt;/p&gt;

&lt;p&gt;The conversation is just beginning, but one thing is clear: our version control practices need to evolve alongside our tools.&lt;/p&gt;

&lt;p&gt;Also, if you want to check out my blogging project, visit Pluma.ink - a clean platform for documenting ideas.&lt;/p&gt;

</description>
      <category>programming</category>
    </item>
    <item>
      <title>Why Headless Sync Clients Matter (And Why Obsidian Just Made the Right Move)</title>
      <dc:creator>Nader</dc:creator>
      <pubDate>Sun, 01 Mar 2026 08:22:26 +0000</pubDate>
      <link>https://forem.com/nader0913/why-headless-sync-clients-matter-and-why-obsidian-just-made-the-right-move-4l45</link>
      <guid>https://forem.com/nader0913/why-headless-sync-clients-matter-and-why-obsidian-just-made-the-right-move-4l45</guid>
      <description>&lt;p&gt;Obsidian just launched a headless sync client, and the developer community is buzzing. But why does a "headless" version of a note-syncing tool matter so much?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Power of Headless&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Headless clients strip away the GUI and expose core functionality through CLI or API. For developers, this unlocks automation possibilities that GUI-only tools can't touch. Want to sync your notes as part of a CI/CD pipeline? Automatically backup your knowledge base to multiple locations? Trigger syncs based on git hooks or cron jobs? Now you can.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Developer Workflows Are Non-Linear&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We don't work in neat, linear patterns. We context-switch constantly—from terminal to editor to browser. When your tools require opening an app and clicking buttons, friction builds up. Headless clients remove that friction. They meet you where you already are: the command line.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Bigger Picture&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This trend extends beyond note-taking. We're seeing headless versions of CMS platforms, design tools, and analytics dashboards. The pattern is clear: developers want programmatic access to everything. We want to script, automate, and integrate tools into our unique workflows.&lt;/p&gt;

&lt;p&gt;Obsidian's move validates what many power users have known for years: the best tools are the ones you can bend to your will. Whether you're building a personal knowledge management system, automating documentation, or creating custom backup solutions, headless access turns tools from applications into building blocks.&lt;/p&gt;

&lt;p&gt;The future isn't just about better apps—it's about composable, scriptable tools that adapt to how &lt;em&gt;you&lt;/em&gt; work.&lt;/p&gt;

&lt;p&gt;Also, if you want to check out my blogging project, visit Pluma.ink - a clean platform for documenting ideas.&lt;/p&gt;

</description>
      <category>obsidian</category>
    </item>
    <item>
      <title>Why Passkeys Aren't Ready for Encrypting Your User Data (Yet)</title>
      <dc:creator>Nader</dc:creator>
      <pubDate>Sat, 28 Feb 2026 06:21:20 +0000</pubDate>
      <link>https://forem.com/nader0913/why-passkeys-arent-ready-for-encrypting-your-user-data-yet-437p</link>
      <guid>https://forem.com/nader0913/why-passkeys-arent-ready-for-encrypting-your-user-data-yet-437p</guid>
      <description>&lt;p&gt;Passkeys are everywhere. GitHub uses them. Google pushes them. Your password manager probably nags you about them. They're the future of authentication, right?&lt;/p&gt;

&lt;p&gt;Well, yes and no.&lt;/p&gt;

&lt;p&gt;While passkeys are excellent for passwordless login, there's a critical limitation developers need to understand: don't use them to encrypt user data.&lt;/p&gt;

&lt;p&gt;Here's why:&lt;/p&gt;

&lt;p&gt;Passkeys rely on the WebAuthn API's PRF (Pseudo-Random Function) extension to derive encryption keys. Sounds solid, but there's a catch—PRF support is inconsistent across platforms. Your users might authenticate successfully with a passkey but fail to decrypt their data because their device doesn't support PRF.&lt;/p&gt;

&lt;p&gt;Imagine building an end-to-end encrypted notes app. A user creates an account on their MacBook (PRF supported), encrypts their notes, then tries to access them from their iPhone (PRF might not work). Boom. Data inaccessible. Your support inbox explodes.&lt;/p&gt;

&lt;p&gt;The safer approach: Use passkeys for authentication, but handle encryption separately with traditional key derivation methods. Think password-based encryption (PBKDF2, Argon2) or server-managed keys with proper access controls.&lt;/p&gt;

&lt;p&gt;This isn't to say passkeys are bad—they're fantastic for eliminating phishing and credential stuffing. Just don't overload them with responsibilities they can't consistently handle yet.&lt;/p&gt;

&lt;p&gt;As the ecosystem matures and PRF support becomes universal, this will change. But today, in 2026, treat passkeys as what they are: a robust authentication mechanism, not a encryption key manager.&lt;/p&gt;

&lt;p&gt;Keep your auth modern, but keep your encryption battle-tested.&lt;/p&gt;

&lt;p&gt;Also, if you want to check out my blogging project, visit Pluma.ink - a clean platform for documenting ideas.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>security</category>
      <category>authentication</category>
      <category>passkeys</category>
    </item>
    <item>
      <title>Stop Coding First: Why README-Driven Development Saves Time</title>
      <dc:creator>Nader</dc:creator>
      <pubDate>Fri, 27 Feb 2026 09:17:23 +0000</pubDate>
      <link>https://forem.com/nader0913/stop-coding-first-why-readme-driven-development-saves-time-57oo</link>
      <guid>https://forem.com/nader0913/stop-coding-first-why-readme-driven-development-saves-time-57oo</guid>
      <description>&lt;p&gt;You've been there: diving into code, building features, then realizing three hours later that you've built the wrong thing. Or worse, built something you can't explain to your team.&lt;/p&gt;

&lt;p&gt;README-driven development flips the script. Write the README first. Before a single line of code.&lt;/p&gt;

&lt;p&gt;Here's why it works:&lt;/p&gt;

&lt;h2&gt;
  
  
  Clarity Before Complexity
&lt;/h2&gt;

&lt;p&gt;Writing what your project does, who it's for, and how to use it forces you to crystallize your thinking. If you can't explain it simply, you haven't thought it through.&lt;/p&gt;

&lt;h2&gt;
  
  
  Immediate Feedback Loop
&lt;/h2&gt;

&lt;p&gt;Share your README with a colleague. Get feedback. Pivot if needed. It's infinitely cheaper than refactoring a week's worth of code.&lt;/p&gt;

&lt;h2&gt;
  
  
  Documentation That Actually Gets Done
&lt;/h2&gt;

&lt;p&gt;Let's be honest: documentation written &lt;em&gt;after&lt;/em&gt; the fact is often rushed or skipped. Write it first, and it's already done when you ship.&lt;/p&gt;

&lt;h2&gt;
  
  
  Better API Design
&lt;/h2&gt;

&lt;p&gt;When you write usage examples before implementation, you design from the user's perspective. Your API becomes cleaner, more intuitive.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Practice
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Create README.md&lt;/li&gt;
&lt;li&gt;Write project description, installation, and basic usage&lt;/li&gt;
&lt;li&gt;Add code examples showing how it &lt;em&gt;should&lt;/em&gt; work&lt;/li&gt;
&lt;li&gt;Only then: start coding&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Your future self will thank you. Your teammates will thank you. Your users will thank you.&lt;/p&gt;

&lt;p&gt;Start with words. Then code. Not the other way around.&lt;/p&gt;




&lt;p&gt;Also, if you want to check out my blogging project, visit &lt;strong&gt;Pluma.ink&lt;/strong&gt; - a clean platform for documenting ideas.&lt;/p&gt;

</description>
      <category>programming</category>
    </item>
    <item>
      <title>The 5-Minute Code Review Checklist That Catches 80% of Bugs</title>
      <dc:creator>Nader</dc:creator>
      <pubDate>Thu, 26 Feb 2026 09:52:41 +0000</pubDate>
      <link>https://forem.com/nader0913/the-5-minute-code-review-checklist-that-catches-80-of-bugs-3pm2</link>
      <guid>https://forem.com/nader0913/the-5-minute-code-review-checklist-that-catches-80-of-bugs-3pm2</guid>
      <description>&lt;p&gt;Code reviews don't have to be exhausting marathons. After reviewing thousands of pull requests, I've distilled the process into five quick checkpoints that catch most issues before they hit production.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. The "Why" Test (60 seconds)
&lt;/h2&gt;

&lt;p&gt;Can you understand why this change exists from the PR description? If not, ask. Context prevents future confusion and helps with debugging months later.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Error Handling Scan (90 seconds)
&lt;/h2&gt;

&lt;p&gt;Skim for try-catch blocks, null checks, and edge cases. Most production bugs come from missing error handling, not logic errors.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. The Delete Check (30 seconds)
&lt;/h2&gt;

&lt;p&gt;Look for what was removed. Deleted code can break dependencies in unexpected ways. A quick scan saves hours of debugging.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. State Management Reality Check (60 seconds)
&lt;/h2&gt;

&lt;p&gt;Does this change introduce new state? If yes, trace how it's updated and accessed. Race conditions and stale state are silent killers.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. The "Merge Tomorrow" Question (60 seconds)
&lt;/h2&gt;

&lt;p&gt;Would you be comfortable merging this if the author disappeared? If there's anything unclear, flag it now.&lt;/p&gt;




&lt;p&gt;This isn't about perfection—it's about catching the high-impact issues quickly. You can always do deeper reviews for critical systems, but this checklist prevents 80% of the bugs that slip through rushed reviews.&lt;/p&gt;

&lt;p&gt;The best code reviews are fast, focused, and kind. Save the energy for the tricky stuff.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;If you want a clean space to document your developer journey, visit &lt;a href="https://pluma.ink" rel="noopener noreferrer"&gt;Pluma.ink&lt;/a&gt; - a blogging platform built for exactly that.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>bestpractices</category>
    </item>
    <item>
      <title>The 5-Minute Documentation Rule That Saved My Sanity (And My Team's)</title>
      <dc:creator>Nader</dc:creator>
      <pubDate>Fri, 20 Feb 2026 07:10:55 +0000</pubDate>
      <link>https://forem.com/nader0913/the-5-minute-documentation-rule-that-saved-my-sanity-and-my-teams-2e4n</link>
      <guid>https://forem.com/nader0913/the-5-minute-documentation-rule-that-saved-my-sanity-and-my-teams-2e4n</guid>
      <description>&lt;p&gt;I used to hate documentation. It felt like extra work that slowed me down. Then I discovered a simple rule that changed everything: &lt;strong&gt;If future-you will need more than 5 minutes to understand it, document it now.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Here's why it works:&lt;/p&gt;

&lt;h2&gt;
  
  
  The 5-minute threshold is the sweet spot
&lt;/h2&gt;

&lt;p&gt;Too short (like variable names), and you're wasting time. Too long (like full architecture docs), and you'll never finish. Five minutes is just enough pain to motivate action.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to document
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Non-obvious function behaviors&lt;/li&gt;
&lt;li&gt;Why you chose approach A over B&lt;/li&gt;
&lt;li&gt;Environment setup quirks&lt;/li&gt;
&lt;li&gt;API endpoints and their gotchas&lt;/li&gt;
&lt;li&gt;That weird bug fix that took 3 hours&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How I apply it
&lt;/h2&gt;

&lt;p&gt;When I'm about to commit code, I ask: "If I saw this in 6 months, would I understand it in under 5 minutes?" If not, I add a comment or update the README. It takes 2-3 minutes now, saves hours later.&lt;/p&gt;

&lt;h2&gt;
  
  
  The magic side effect
&lt;/h2&gt;

&lt;p&gt;Your code reviews get faster. Your onboarding improves. Your future self sends thank-you notes (mentally).&lt;/p&gt;

&lt;p&gt;Documentation doesn't have to be perfect. It just has to exist. Start with the 5-minute rule, and watch your codebase become less of a mystery box.&lt;/p&gt;

&lt;p&gt;Your future teammates (and yourself) will thank you.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;If you want a clean space to document your developer journey, visit &lt;a href="https://pluma.ink" rel="noopener noreferrer"&gt;Pluma.ink&lt;/a&gt; - a blogging platform built for exactly that.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
    </item>
    <item>
      <title>Anthropic Just Banned Subscription Auth for Third-Party Apps — What Developers Need to Know</title>
      <dc:creator>Nader</dc:creator>
      <pubDate>Thu, 19 Feb 2026 08:25:19 +0000</pubDate>
      <link>https://forem.com/nader0913/anthropic-just-banned-subscription-auth-for-third-party-apps-what-developers-need-to-know-29kg</link>
      <guid>https://forem.com/nader0913/anthropic-just-banned-subscription-auth-for-third-party-apps-what-developers-need-to-know-29kg</guid>
      <description>&lt;p&gt;If you've been building tools or apps that piggyback on a user's Claude subscription instead of using the official API — that door just closed.&lt;/p&gt;

&lt;p&gt;Anthropic quietly but officially updated their compliance documentation to explicitly ban using subscription-based authentication to power third-party applications. In plain terms: you can't tunnel Claude.ai access through someone's paid plan to serve your own users.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why does this matter?
&lt;/h2&gt;

&lt;p&gt;A lot of indie developers and startups took this shortcut. It was cheaper. Subscription pricing is predictable. API tokens are metered and can spike hard. So the temptation was real.&lt;/p&gt;

&lt;p&gt;But this was always a grey area — and now it's not. It's a clear line.&lt;/p&gt;

&lt;h2&gt;
  
  
  What changes right now
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Any app routing Claude requests via a user's subscription login needs to migrate to the API&lt;/li&gt;
&lt;li&gt;Token-based access via api.anthropic.com is the only compliant path forward&lt;/li&gt;
&lt;li&gt;Violating this risks account bans for both you and your users&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The silver lining
&lt;/h2&gt;

&lt;p&gt;This actually levels the playing field. Apps that were cutting corners now compete on equal footing with those who built properly from day one. And Anthropic's API while metered has solid rate limits and predictable pricing tiers.&lt;/p&gt;

&lt;p&gt;If you're not already on the API path, now's the time. Set up a key, wrap your calls, and stop relying on session auth hacks.&lt;/p&gt;

&lt;h2&gt;
  
  
  The bigger picture
&lt;/h2&gt;

&lt;p&gt;As AI tooling matures, expect more of this. Platforms are drawing clearer lines between consumer use and developer use. Build on APIs, not workarounds.&lt;/p&gt;




&lt;p&gt;If you want a clean space to document your developer journey, check out Pluma.ink - a blogging platform built for exactly that.&lt;/p&gt;

</description>
      <category>api</category>
    </item>
    <item>
      <title>Your AI Tools Make You 10x Faster. So Why Isn't Your Company 10x Productive?</title>
      <dc:creator>Nader</dc:creator>
      <pubDate>Thu, 19 Feb 2026 08:23:23 +0000</pubDate>
      <link>https://forem.com/nader0913/your-ai-tools-make-you-10x-faster-so-why-isnt-your-company-10x-productive-ime</link>
      <guid>https://forem.com/nader0913/your-ai-tools-make-you-10x-faster-so-why-isnt-your-company-10x-productive-ime</guid>
      <description>&lt;p&gt;A Fortune article trending on Hacker News today dropped a quiet bombshell: thousands of CEOs in a new study admitted AI has had &lt;em&gt;no measurable impact&lt;/em&gt; on employment or productivity.&lt;/p&gt;

&lt;p&gt;Meanwhile, you're shipping features in half the time. Something doesn't add up.&lt;/p&gt;

&lt;h2&gt;
  
  
  The gap is real — and it's not about the tools
&lt;/h2&gt;

&lt;p&gt;Economists call it the productivity paradox. It happened with computers in the 80s, with the internet in the 90s. New technology floods in, individual workers feel faster, but aggregate productivity barely moves. Then, suddenly — it does. All at once.&lt;/p&gt;

&lt;p&gt;We're probably in that delay right now.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where individual gains go to die
&lt;/h2&gt;

&lt;p&gt;When you use Copilot to write boilerplate faster, that time usually gets absorbed — more meetings, more scope creep, more tickets queued up by a PM who now assumes you can deliver twice as much. The bottleneck just moved.&lt;/p&gt;

&lt;p&gt;Organizational structure is the real constraint. If your deploy pipeline takes 3 days of approvals, writing code in 20 minutes instead of 2 hours doesn't matter.&lt;/p&gt;

&lt;h2&gt;
  
  
  What actually changes things
&lt;/h2&gt;

&lt;p&gt;The devs who seem superhuman with AI aren't just autocompleting code. They're:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Replacing whole workflows, not just tasks&lt;/li&gt;
&lt;li&gt;Shipping &lt;em&gt;ideas&lt;/em&gt; faster, not just lines&lt;/li&gt;
&lt;li&gt;Using AI to do things they simply &lt;em&gt;wouldn't have done&lt;/em&gt; before&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The leverage isn't in doing the same thing quicker. It's in raising your ambition threshold.&lt;/p&gt;

&lt;h2&gt;
  
  
  The take
&lt;/h2&gt;

&lt;p&gt;CEOs not feeling it makes sense — they're measuring the wrong layer. But the productivity wave is real. It's just building in individuals first. The macro numbers will catch up.&lt;/p&gt;

&lt;p&gt;You're early. Stay sharp.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;If you're a developer who wants a clean space to document your ideas and builds, check out &lt;a href="https://pluma.ink" rel="noopener noreferrer"&gt;Pluma.ink&lt;/a&gt; — a blogging platform I built for exactly that.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>programming</category>
    </item>
    <item>
      <title>Stop Writing CSS Like It's 2015 — 5 Modern Properties You Should Already Be Using</title>
      <dc:creator>Nader</dc:creator>
      <pubDate>Tue, 17 Feb 2026 08:05:35 +0000</pubDate>
      <link>https://forem.com/nader0913/stop-writing-css-like-its-2015-5-modern-properties-you-should-already-be-using-1d1k</link>
      <guid>https://forem.com/nader0913/stop-writing-css-like-its-2015-5-modern-properties-you-should-already-be-using-1d1k</guid>
      <description>&lt;p&gt;If your CSS still looks like a Stack Overflow answer from 2014, it's time for a refresh. Browsers have quietly shipped some genuinely great stuff while we were busy arguing about utility-first frameworks.&lt;/p&gt;

&lt;p&gt;Here are 5 modern CSS properties worth adding to your muscle memory today:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. &lt;code&gt;container-size&lt;/code&gt; (Container Queries)&lt;/strong&gt;&lt;br&gt;
Responsive design based on &lt;em&gt;parent&lt;/em&gt; size, not viewport. Finally. Components that adapt to where they live, not just the screen.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="k"&gt;@container&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;min-width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;400px&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nc"&gt;.card&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;flex-direction&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;row&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;2. &lt;code&gt;:has()&lt;/code&gt; — The Parent Selector&lt;/strong&gt;&lt;br&gt;
The selector CSS was "never going to have." Now it does. Style a parent based on its children without JavaScript.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nt"&gt;form&lt;/span&gt;&lt;span class="nd"&gt;:has&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;input&lt;/span&gt;&lt;span class="nd"&gt;:invalid&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;border-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;red&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;3. &lt;code&gt;color-mix()&lt;/code&gt;&lt;/strong&gt;&lt;br&gt;
Mix two colors in CSS without a preprocessor or JS. Dead simple theming.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nt"&gt;background&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nt"&gt;color-mix&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;in&lt;/span&gt; &lt;span class="nt"&gt;srgb&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="err"&gt;#3&lt;/span&gt;&lt;span class="nt"&gt;b82f6&lt;/span&gt; &lt;span class="err"&gt;30&lt;/span&gt;&lt;span class="o"&gt;%,&lt;/span&gt; &lt;span class="nt"&gt;white&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;4. &lt;code&gt;text-wrap: balance&lt;/code&gt;&lt;/strong&gt;&lt;br&gt;
One line. Fixes orphaned words in headings automatically. Throw it on every &lt;code&gt;h1&lt;/code&gt;–&lt;code&gt;h4&lt;/code&gt; and never think about it again.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. &lt;code&gt;@layer&lt;/code&gt;&lt;/strong&gt;Cascade layers let you explicitly control specificity order. No more &lt;code&gt;!important&lt;/code&gt; arms races.&lt;/p&gt;




&lt;p&gt;The CSS landscape in 2026 is genuinely exciting. A lot of patterns we reached for JS or preprocessors to solve are now native — and browser support is solid.&lt;/p&gt;

&lt;p&gt;Pick one, drop it into your next project, and see how it feels.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;If you're building something you want to write about, check out &lt;a href="https://pluma.ink" rel="noopener noreferrer"&gt;Pluma.ink&lt;/a&gt; — a clean blogging platform built for developers who want a simple space to document their ideas.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>csswebdevfronprogrammingtend</category>
    </item>
    <item>
      <title>Stop Writing Perfect Code on the First Try (Your Future Self Will Thank You)</title>
      <dc:creator>Nader</dc:creator>
      <pubDate>Mon, 16 Feb 2026 17:19:57 +0000</pubDate>
      <link>https://forem.com/nader0913/stop-writing-perfect-code-on-the-first-try-your-future-self-will-thank-you-1gdp</link>
      <guid>https://forem.com/nader0913/stop-writing-perfect-code-on-the-first-try-your-future-self-will-thank-you-1gdp</guid>
      <description>&lt;p&gt;Here's a truth that took me years to internalize: the developers who ship the most aren't the ones writing perfect code on the first attempt. They're the ones who embrace the messy middle.&lt;/p&gt;

&lt;p&gt;We've all been there. You stare at a blank file, paralyzed by the need to architect the "right" solution from line one. You refactor before you've even validated the feature works. You spend hours debating variable names when you haven't proven the concept yet.&lt;/p&gt;

&lt;h2&gt;
  
  
  Here's what changed my workflow:
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. Permission to be ugly first.&lt;/strong&gt; My initial implementation is always rough. No abstractions, some duplication, hard-coded values. But it works, and I can click through it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. The 48-hour rule.&lt;/strong&gt; I commit the working mess, ship it to staging, and walk away. Two days later, I return with fresh eyes. The refactor opportunities become obvious.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Delete, don't preserve.&lt;/strong&gt; That clever abstraction you're not sure about? Delete it. Code is cheap. Cognitive load is expensive. If you can't justify it in one sentence, it's premature.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Comments are code smell.&lt;/strong&gt; If you need a comment to explain what code does, the code isn't clear enough. Rename, extract, simplify.&lt;/p&gt;

&lt;p&gt;The irony? Once I gave myself permission to write bad code first, my "final" code got significantly better. Because I was optimizing the right thing: working software that solves real problems.&lt;/p&gt;

&lt;p&gt;Your first draft doesn't need to be your best work. It just needs to exist.&lt;/p&gt;




&lt;p&gt;Also, if you want to check out my blogging project, visit &lt;strong&gt;&lt;a href="https://pluma.ink" rel="noopener noreferrer"&gt;Pluma.ink&lt;/a&gt;&lt;/strong&gt; - a clean platform for documenting ideas.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tags:&lt;/strong&gt; #productivity #softwaredevelopment #coding #cleancode&lt;/p&gt;

</description>
      <category>cleancode</category>
    </item>
    <item>
      <title>The Real Cost of "I'll Refactor It Later" (And Why I Finally Stopped Lying to Myself)</title>
      <dc:creator>Nader</dc:creator>
      <pubDate>Sat, 14 Feb 2026 11:15:00 +0000</pubDate>
      <link>https://forem.com/nader0913/the-real-cost-of-ill-refactor-it-later-and-why-i-finally-stopped-lying-to-myself-40g</link>
      <guid>https://forem.com/nader0913/the-real-cost-of-ill-refactor-it-later-and-why-i-finally-stopped-lying-to-myself-40g</guid>
      <description>&lt;p&gt;We've all been there. You're deep in flow, solving a problem, and you write something that works but... isn't quite right. The variable names are vague. The function is doing three things instead of one. There's a comment that says "TODO: clean this up."&lt;/p&gt;

&lt;p&gt;"I'll refactor it later," you tell yourself. Narrator: &lt;em&gt;They did not refactor it later.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I spent years accumulating technical debt with this exact promise. Every "quick fix" that became permanent. Every "temporary solution" that's still running in production. And honestly? It nearly killed my latest project.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Wake-Up Call
&lt;/h2&gt;

&lt;p&gt;Last month, I was adding a simple feature to a project I'd been building for months. What should have taken an hour took three days. Why? Because I was navigating around six months of "I'll refactor it later" decisions. Functions with misleading names. Tight coupling everywhere. Logic scattered across files with no clear pattern.&lt;/p&gt;

&lt;p&gt;The feature worked eventually, but I was exhausted. More importantly, I'd lost the joy of building. Every change felt like defusing a bomb.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Hidden Costs
&lt;/h2&gt;

&lt;p&gt;Here's what "later" actually costs:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mental overhead&lt;/strong&gt;: Every time you open that file, you have to re-decode what past-you was thinking. It's like paying compound interest with your attention.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Slower iteration&lt;/strong&gt;: Features that should be simple become archaeological expeditions. You spend more time understanding existing code than writing new code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lost momentum&lt;/strong&gt;: Nothing kills motivation faster than dreading your own codebase. When opening your project feels like homework, you've lost.&lt;/p&gt;

&lt;h2&gt;
  
  
  The mindset shift that changed everything
&lt;/h2&gt;

&lt;p&gt;I made one simple rule: &lt;strong&gt;If I'm touching a file, I leave it better than I found it.&lt;/strong&gt; Not perfect. Just better.&lt;/p&gt;

&lt;p&gt;Adding a feature? Clean up the function names while you're there. Fixing a bug? Extract that nested logic into a helper. Touching a view? Rename those cryptic variables.&lt;/p&gt;

&lt;p&gt;Five minutes of cleanup today saves thirty minutes of confusion next week.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Boy Scout Rule
&lt;/h2&gt;

&lt;p&gt;This is basically the Boy Scout Rule: "Leave the campground cleaner than you found it." But here's the key insight I missed for years: &lt;strong&gt;you don't have to fix everything.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You're not refactoring the entire codebase. You're just improving the small area you're already working in. It's opportunistic. It's incremental. And most importantly, it compounds.&lt;/p&gt;

&lt;p&gt;After two weeks of following this rule, my codebase started feeling different. After a month, adding features was actually &lt;em&gt;fun&lt;/em&gt; again. Functions had clear names. Logic was where I expected it. The code was becoming self-documenting.&lt;/p&gt;

&lt;h2&gt;
  
  
  When "Later" Is Actually Never
&lt;/h2&gt;

&lt;p&gt;Let's be honest about what "I'll refactor it later" really means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"I'll refactor it when I have time" = Never (you won't have time)&lt;/li&gt;
&lt;li&gt;"I'll refactor it when the project is done" = Never (projects are never done)&lt;/li&gt;
&lt;li&gt;"I'll refactor it when we hit issues" = Too late (you're already drowning)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The only "later" that works is "the next time I touch this code" - which is exactly the Boy Scout Rule.&lt;/p&gt;

&lt;h2&gt;
  
  
  Practical Guidelines
&lt;/h2&gt;

&lt;p&gt;Here's what I actually do:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;If it takes less than 5 minutes, do it now.&lt;/strong&gt; Rename that variable. Extract that constant. Add that type annotation.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;If it's bigger, create a ticket.&lt;/strong&gt; But be honest: will you actually do it? If not, do the 5-minute version now.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Don't refactor for hypothetical futures.&lt;/strong&gt; Refactor for clarity today. The future will take care of itself.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Test as you go.&lt;/strong&gt; Small refactors are easy to verify. Big ones are scary. Stay small.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The Exception
&lt;/h2&gt;

&lt;p&gt;There &lt;em&gt;is&lt;/em&gt; one valid "later": when you're prototyping or exploring an idea. Throw away code can be messy. But the moment you decide it's staying, that's when the Boy Scout Rule starts.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Changed
&lt;/h2&gt;

&lt;p&gt;Six months ago, my codebase felt like a weight. Today, it feels like a tool. The difference? I stopped deferring quality to "later" and started making tiny improvements in the moment.&lt;/p&gt;

&lt;p&gt;Your code doesn't need to be perfect. It just needs to be slightly better than it was yesterday.&lt;/p&gt;




&lt;p&gt;Also, if you're working on projects that need a clean blogging platform to document your journey, check out &lt;strong&gt;&lt;a href="https://pluma.ink" rel="noopener noreferrer"&gt;Pluma.ink&lt;/a&gt;&lt;/strong&gt; - I built it to keep technical writing distraction-free.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tags:&lt;/strong&gt; #productivity #coding #webdev #programming&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>programming</category>
      <category>webdev</category>
      <category>product</category>
    </item>
  </channel>
</rss>
