<?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: Kunal Pareek</title>
    <description>The latest articles on Forem by Kunal Pareek (@kunal_pareek).</description>
    <link>https://forem.com/kunal_pareek</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%2F3934854%2F05c77d54-6212-4eed-aa57-2a74e05e4269.jpg</url>
      <title>Forem: Kunal Pareek</title>
      <link>https://forem.com/kunal_pareek</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/kunal_pareek"/>
    <language>en</language>
    <item>
      <title>How I Submitted My First WordPress Core Patch (And What I Learned)</title>
      <dc:creator>Kunal Pareek</dc:creator>
      <pubDate>Sun, 17 May 2026 20:26:45 +0000</pubDate>
      <link>https://forem.com/kunal_pareek/how-i-submitted-my-first-wordpress-core-patch-and-what-i-learned-a72</link>
      <guid>https://forem.com/kunal_pareek/how-i-submitted-my-first-wordpress-core-patch-and-what-i-learned-a72</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq0t8nq9x6opm83ucgk5h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq0t8nq9x6opm83ucgk5h.png" alt=" " width="800" height="246"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I always assumed contributing to WordPress core was for people with decades of open source experience. Senior engineers. People whose names you recognize in commit logs.&lt;/p&gt;

&lt;p&gt;Turns out I was wrong. I submitted my first patch this week and the process was more straightforward than I expected. Not easy — but straightforward. Here is exactly what I did.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Finding a ticket worth working on&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The first thing I learned is that most open tickets on Trac are not actually patchable. Either someone recently said they cannot reproduce the bug, or the fix requires a design decision that core committers have not agreed on yet, or the ticket is so old nobody cares anymore.&lt;/p&gt;

&lt;p&gt;I filtered Trac for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Status: new&lt;/li&gt;
&lt;li&gt;Keywords: needs-patch&lt;/li&gt;
&lt;li&gt;Component: REST API&lt;/li&gt;
&lt;li&gt;Type: defect (bug)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I looked at three tickets before finding one worth touching. The first two had recent comments saying the bug could not be reproduced. I walked away from both immediately. Never spend time on a ticket where someone recently said "can't reproduce" — it is a dead end.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The ticket I picked&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I landed on &lt;a href="https://core.trac.wordpress.org/ticket/48257" rel="noopener noreferrer"&gt;#48257&lt;/a&gt;. The bug was a REST API discoverability problem in the media upload endpoint.&lt;/p&gt;

&lt;p&gt;When you POST to &lt;code&gt;/wp/v2/media&lt;/code&gt; and the server runs out of resources mid-upload during image sub-size generation, WordPress sends an &lt;code&gt;X-WP-Upload-Attachment-ID&lt;/code&gt; header back to the client. This tells the client the attachment ID so it can retry via the &lt;code&gt;/post-process&lt;/code&gt; endpoint.&lt;/p&gt;

&lt;p&gt;The problem is that WordPress never sent a &lt;code&gt;Link&lt;/code&gt; header pointing to where that post-process endpoint actually lives. So REST clients had no standard way to discover it. They had to hardcode or guess the URL which is fragile and goes against REST API principles.&lt;/p&gt;

&lt;p&gt;The ticket had been open since WordPress 5.3. Zero pull requests. Four years untouched.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Reading the code before writing anything&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Before writing a single line I cloned WordPress develop:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/WordPress/wordpress-develop.git
&lt;span class="nb"&gt;cd &lt;/span&gt;wordpress-develop
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then I opened &lt;code&gt;src/wp-includes/rest-api/endpoints/class-wp-rest-attachments-controller.php&lt;/code&gt; and searched for &lt;code&gt;X-WP-Upload-Attachment-ID&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Here is what I found. The raw &lt;code&gt;header()&lt;/code&gt; call happens very early in &lt;code&gt;create_item()&lt;/code&gt; before the &lt;code&gt;$response&lt;/code&gt; object even exists. This is intentional. If the server fatals during &lt;code&gt;wp_update_attachment_metadata()&lt;/code&gt; the client still gets the attachment ID from that header and can recover.&lt;/p&gt;

&lt;p&gt;But the &lt;code&gt;Link&lt;/code&gt; header does not need to go out at that same moment. It can be added to &lt;code&gt;$response&lt;/code&gt; after the response object is constructed, right next to where the &lt;code&gt;Location&lt;/code&gt; header is already being set. No order-of-operations problem at all.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The actual fix&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;After the &lt;code&gt;Location&lt;/code&gt; header I added this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="cm"&gt;/*
 * Add a Link header pointing to the post-process endpoint so REST clients
 * can formally discover it and resume image sub-size generation if the
 * initial upload processing fails due to a server error.
 *
 * @since 6.8.0
 */&lt;/span&gt;
&lt;span class="nv"&gt;$response&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;add_link&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="s1"&gt;'https://api.w.org/action-post-process'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nf"&gt;rest_url&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nb"&gt;sprintf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="s1"&gt;'%s/%s/%d/post-process'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;namespace&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;rest_base&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$attachment_id&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="k"&gt;array&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="s1"&gt;'embeddable'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="kc"&gt;false&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;One thing I want to explain here is the relation type. The original ticket suggested using &lt;code&gt;edit-media&lt;/code&gt; as the link relation. But &lt;code&gt;edit-media&lt;/code&gt; is already used by the &lt;code&gt;/edit&lt;/code&gt; endpoint in the same controller. Using it for post-processing would be semantically wrong and would confuse clients that rely on relation types having consistent meaning. The &lt;code&gt;api.w.org/action-*&lt;/code&gt; pattern is what core uses for action links so I followed that instead.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Generating the patch file&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git diff src/wp-includes/rest-api/endpoints/class-wp-rest-attachments-controller.php &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; 48257.patch
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I ran &lt;code&gt;cat 48257.patch&lt;/code&gt; to verify only my intended lines changed before uploading anything.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Writing the Trac comment&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is the part most people underestimate. The comment you write on the ticket is evaluated just as seriously as the code itself.&lt;/p&gt;

&lt;p&gt;I explained what I understood the bug to be, why the order-of-operations issue is still present in trunk, why my approach works without hitting that issue, why I chose a different relation type than the one suggested, and what feedback I was looking for from core contributors.&lt;/p&gt;

&lt;p&gt;That written explanation took me longer than the code change itself. But if you just upload a patch with no context you are making the reviewer do all the work of figuring out your reasoning. Most of the time they won't bother.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What I took away from this&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Read the full ticket history including linked tickets before writing anything. The real context is almost always buried in the comments not the description.&lt;/p&gt;

&lt;p&gt;Comment on the ticket before writing code. Post your intended approach and ask if it makes sense. This protects you from spending hours going in the wrong direction.&lt;/p&gt;

&lt;p&gt;Small focused patches move faster. My patch changes 13 lines in one file. A reviewer can evaluate it in a few minutes.&lt;/p&gt;

&lt;p&gt;The writing matters as much as the code. Your comment is a signal about how you think and communicate. For a distributed team that works async this is arguably more important than the code quality itself.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to find your first ticket&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Start here:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://core.trac.wordpress.org/query?status=new&amp;amp;keywords=~needs-patch&amp;amp;component=REST+API&amp;amp;type=defect+%28bug%29
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Sort by modified date descending. Look for tickets with zero pull requests and a clearly reproducible bug. Skip anything with recent "can't reproduce" comments or active disagreement between core committers about the right fix.&lt;/p&gt;

&lt;p&gt;Pick something small. Read everything. Comment before you code. Write like you care about the reasoning not just the result.&lt;/p&gt;

&lt;p&gt;That is genuinely the whole process.&lt;/p&gt;

</description>
      <category>wordpress</category>
      <category>opensource</category>
      <category>php</category>
      <category>webdev</category>
    </item>
    <item>
      <title>How AI Changed My Development Workflow Without Replacing Engineering Thinking</title>
      <dc:creator>Kunal Pareek</dc:creator>
      <pubDate>Sat, 16 May 2026 17:12:54 +0000</pubDate>
      <link>https://forem.com/kunal_pareek/how-ai-changed-my-development-workflow-without-replacing-engineering-thinking-1cd7</link>
      <guid>https://forem.com/kunal_pareek/how-ai-changed-my-development-workflow-without-replacing-engineering-thinking-1cd7</guid>
      <description>&lt;p&gt;AI has significantly changed how I approach day to day development, mainly by reducing iteration time and helping me explore multiple implementation approaches faster.&lt;/p&gt;

&lt;p&gt;I do not really use AI as a replacement for engineering decisions.&lt;/p&gt;

&lt;p&gt;I use it more as an acceleration tool.&lt;/p&gt;

&lt;p&gt;Most of my work involves moving between different parts of the stack:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;frontend systems&lt;/li&gt;
&lt;li&gt;APIs&lt;/li&gt;
&lt;li&gt;backend logic&lt;/li&gt;
&lt;li&gt;WordPress plugins&lt;/li&gt;
&lt;li&gt;React and Next.js applications&lt;/li&gt;
&lt;li&gt;automation workflows&lt;/li&gt;
&lt;li&gt;debugging production issues&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Switching contexts constantly can slow development down, especially in larger systems.&lt;/p&gt;

&lt;p&gt;AI became useful because it reduces some of that friction.&lt;/p&gt;

&lt;p&gt;For example, when working with React or Next.js applications, I often use AI to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;generate initial boilerplate&lt;/li&gt;
&lt;li&gt;explore multiple component structures&lt;/li&gt;
&lt;li&gt;validate implementation ideas&lt;/li&gt;
&lt;li&gt;simplify repetitive setup work&lt;/li&gt;
&lt;li&gt;quickly test alternative approaches&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In backend workflows, it helps me move faster while working with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;REST APIs&lt;/li&gt;
&lt;li&gt;request validation&lt;/li&gt;
&lt;li&gt;database queries&lt;/li&gt;
&lt;li&gt;automation systems&lt;/li&gt;
&lt;li&gt;integration logic&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One thing I found especially useful is debugging assistance.&lt;/p&gt;

&lt;p&gt;Earlier, debugging often meant searching across documentation, GitHub issues, Stack Overflow threads, and multiple unrelated discussions just to narrow down possibilities.&lt;/p&gt;

&lt;p&gt;Now AI helps reduce that search time significantly.&lt;/p&gt;

&lt;p&gt;It becomes easier to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;identify likely causes&lt;/li&gt;
&lt;li&gt;test hypotheses faster&lt;/li&gt;
&lt;li&gt;compare implementation patterns&lt;/li&gt;
&lt;li&gt;isolate edge cases&lt;/li&gt;
&lt;li&gt;reason through unfamiliar systems&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That said, I became equally careful about when not to rely on AI.&lt;/p&gt;

&lt;p&gt;I still prefer thinking through:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;architecture decisions&lt;/li&gt;
&lt;li&gt;system design&lt;/li&gt;
&lt;li&gt;plugin structure&lt;/li&gt;
&lt;li&gt;scalability concerns&lt;/li&gt;
&lt;li&gt;performance optimization&lt;/li&gt;
&lt;li&gt;maintainability tradeoffs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;using my own understanding first.&lt;/p&gt;

&lt;p&gt;Especially in long term systems, maintainability matters much more than simply generating code quickly.&lt;/p&gt;

&lt;p&gt;One thing that helped me here was building systems before AI tooling became part of my workflow.&lt;/p&gt;

&lt;p&gt;Working deeply with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;WordPress plugins&lt;/li&gt;
&lt;li&gt;frontend systems&lt;/li&gt;
&lt;li&gt;APIs&lt;/li&gt;
&lt;li&gt;production debugging&lt;/li&gt;
&lt;li&gt;client workflows&lt;/li&gt;
&lt;li&gt;maintainable architectures&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;forced me to understand how things work underneath the abstraction layers.&lt;/p&gt;

&lt;p&gt;That foundation changed how I use AI today.&lt;/p&gt;

&lt;p&gt;Instead of blindly accepting outputs, I usually:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;validate implementation logic&lt;/li&gt;
&lt;li&gt;review edge cases&lt;/li&gt;
&lt;li&gt;simplify generated code&lt;/li&gt;
&lt;li&gt;remove unnecessary complexity&lt;/li&gt;
&lt;li&gt;adapt solutions to fit existing architecture&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;because generated code that technically works is not always production friendly.&lt;/p&gt;

&lt;p&gt;I also noticed that AI works best when the developer already understands the problem clearly.&lt;/p&gt;

&lt;p&gt;The quality of output depends heavily on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;context&lt;/li&gt;
&lt;li&gt;engineering judgment&lt;/li&gt;
&lt;li&gt;architectural understanding&lt;/li&gt;
&lt;li&gt;ability to evaluate tradeoffs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Without that, it becomes very easy to generate fragile systems quickly.&lt;/p&gt;

&lt;p&gt;Another thing AI improved for me is experimentation.&lt;/p&gt;

&lt;p&gt;It is much easier now to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;prototype ideas&lt;/li&gt;
&lt;li&gt;compare approaches&lt;/li&gt;
&lt;li&gt;test unfamiliar libraries&lt;/li&gt;
&lt;li&gt;explore architecture patterns&lt;/li&gt;
&lt;li&gt;understand implementation tradeoffs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;without spending hours setting up everything manually first.&lt;/p&gt;

&lt;p&gt;That speeds up learning significantly.&lt;/p&gt;

&lt;p&gt;At the same time, AI also reinforced something important for me:&lt;br&gt;
strong engineering fundamentals matter even more now.&lt;/p&gt;

&lt;p&gt;Because once code generation becomes easier, the harder problems become:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;system design&lt;/li&gt;
&lt;li&gt;maintainability&lt;/li&gt;
&lt;li&gt;debugging&lt;/li&gt;
&lt;li&gt;scalability&lt;/li&gt;
&lt;li&gt;communication&lt;/li&gt;
&lt;li&gt;architecture clarity&lt;/li&gt;
&lt;li&gt;developer experience&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those are still deeply human engineering problems.&lt;/p&gt;

&lt;p&gt;Overall, AI made me faster and more efficient, but it also made me value foundational understanding much more.&lt;/p&gt;

&lt;p&gt;Knowing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;when to trust AI&lt;/li&gt;
&lt;li&gt;when to question it&lt;/li&gt;
&lt;li&gt;when to simplify generated solutions&lt;/li&gt;
&lt;li&gt;and when to rely completely on your own reasoning&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;became an important engineering skill on its own.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>wordpress</category>
      <category>programming</category>
    </item>
    <item>
      <title>Improving Plugin Developer Workflows in WordPress Projects</title>
      <dc:creator>Kunal Pareek</dc:creator>
      <pubDate>Sat, 16 May 2026 17:07:48 +0000</pubDate>
      <link>https://forem.com/kunal_pareek/improving-plugin-developer-workflows-in-wordpress-projects-28b0</link>
      <guid>https://forem.com/kunal_pareek/improving-plugin-developer-workflows-in-wordpress-projects-28b0</guid>
      <description>&lt;p&gt;Over the years, one thing I have noticed while building WordPress plugins is that development speed is rarely limited by coding itself.&lt;/p&gt;

&lt;p&gt;Most of the time gets consumed by repetitive workflows.&lt;/p&gt;

&lt;p&gt;Refreshing local environments.&lt;br&gt;&lt;br&gt;
Testing plugin activation repeatedly.&lt;br&gt;&lt;br&gt;
Switching between admin panels and code editors.&lt;br&gt;&lt;br&gt;
Manually clearing caches.&lt;br&gt;&lt;br&gt;
Rebuilding assets for small UI changes.&lt;br&gt;&lt;br&gt;
Debugging conflicts between plugins.&lt;br&gt;&lt;br&gt;
Setting up the same boilerplate structure again and again.&lt;/p&gt;

&lt;p&gt;As projects grow, these small interruptions slowly reduce development quality and focus.&lt;/p&gt;

&lt;p&gt;This article is about some practical workflow improvements that helped me build plugins more consistently and maintain them with less friction over time.&lt;/p&gt;


&lt;h2&gt;
  
  
  The Real Problem Is Context Switching
&lt;/h2&gt;

&lt;p&gt;In many WordPress projects, developers constantly move between:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;wp-admin&lt;/li&gt;
&lt;li&gt;terminal&lt;/li&gt;
&lt;li&gt;browser devtools&lt;/li&gt;
&lt;li&gt;API testing tools&lt;/li&gt;
&lt;li&gt;database tools&lt;/li&gt;
&lt;li&gt;frontend build systems&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That context switching becomes exhausting in larger projects.&lt;/p&gt;

&lt;p&gt;I started realizing that improving developer workflow was not just about speed. It was about reducing mental overhead.&lt;/p&gt;

&lt;p&gt;Good workflows make developers think more about systems and less about repetitive setup tasks.&lt;/p&gt;


&lt;h2&gt;
  
  
  Standardizing Plugin Structure Early
&lt;/h2&gt;

&lt;p&gt;One mistake I made in older plugins was treating every project differently.&lt;/p&gt;

&lt;p&gt;Different folder structures.&lt;br&gt;&lt;br&gt;
Different naming patterns.&lt;br&gt;&lt;br&gt;
Different initialization methods.&lt;/p&gt;

&lt;p&gt;This becomes difficult to maintain after a few projects.&lt;/p&gt;

&lt;p&gt;Now I try to keep a consistent structure across plugins:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;plugin/
├── admin/
├── frontend/
├── includes/
├── assets/
├── templates/
├── languages/
├── build/
└── plugin.php
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Even small consistency improvements help when returning to projects months later.&lt;/p&gt;

&lt;p&gt;It also makes onboarding easier if another developer joins the project.&lt;/p&gt;




&lt;h2&gt;
  
  
  Separating Logic From Hooks
&lt;/h2&gt;

&lt;p&gt;Earlier, I used to place too much logic directly inside WordPress hooks.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nf"&gt;add_action&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'init'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// large logic block&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This works initially but becomes difficult to debug and test later.&lt;/p&gt;

&lt;p&gt;Now I prefer keeping hooks lightweight and moving actual logic into dedicated classes or services.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nf"&gt;add_action&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'init'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;Plugin_Bootstrap&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;class&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'init'&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then the internal system handles responsibilities separately.&lt;/p&gt;

&lt;p&gt;This small shift improves readability and long term maintainability significantly.&lt;/p&gt;




&lt;h2&gt;
  
  
  Using Local Development Environments Properly
&lt;/h2&gt;

&lt;p&gt;For a long time I underestimated local environments.&lt;/p&gt;

&lt;p&gt;I used shared staging environments for plugin development which created multiple problems:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;inconsistent debugging&lt;/li&gt;
&lt;li&gt;plugin conflicts&lt;/li&gt;
&lt;li&gt;slow iteration&lt;/li&gt;
&lt;li&gt;unstable testing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Moving to proper local WordPress setups improved development speed immediately.&lt;/p&gt;

&lt;p&gt;Especially for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;database resets&lt;/li&gt;
&lt;li&gt;plugin testing&lt;/li&gt;
&lt;li&gt;API debugging&lt;/li&gt;
&lt;li&gt;Gutenberg experiments&lt;/li&gt;
&lt;li&gt;frontend asset rebuilding&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now I treat local setup as part of the engineering workflow itself.&lt;/p&gt;




&lt;h2&gt;
  
  
  Automating Repetitive Tasks
&lt;/h2&gt;

&lt;p&gt;One of the biggest workflow improvements came from automating small repetitive tasks.&lt;/p&gt;

&lt;p&gt;Examples:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;automatic asset builds&lt;/li&gt;
&lt;li&gt;plugin packaging&lt;/li&gt;
&lt;li&gt;linting&lt;/li&gt;
&lt;li&gt;formatting&lt;/li&gt;
&lt;li&gt;environment setup&lt;/li&gt;
&lt;li&gt;deployment preparation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Even basic npm scripts help a lot.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"scripts"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"dev"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"vite"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"build"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"vite build"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"lint"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"eslint ."&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The goal is not complexity.&lt;/p&gt;

&lt;p&gt;The goal is reducing manual repetition.&lt;/p&gt;




&lt;h2&gt;
  
  
  Better Debugging Improves Development Speed
&lt;/h2&gt;

&lt;p&gt;A surprising amount of plugin development time goes into debugging.&lt;/p&gt;

&lt;p&gt;Especially:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;hooks firing unexpectedly&lt;/li&gt;
&lt;li&gt;AJAX failures&lt;/li&gt;
&lt;li&gt;REST API permission issues&lt;/li&gt;
&lt;li&gt;plugin conflicts&lt;/li&gt;
&lt;li&gt;caching problems&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I started improving debugging by:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;using clearer logging&lt;/li&gt;
&lt;li&gt;isolating plugin features&lt;/li&gt;
&lt;li&gt;reducing hidden dependencies&lt;/li&gt;
&lt;li&gt;organizing hooks properly&lt;/li&gt;
&lt;li&gt;documenting critical flows&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The cleaner the internal system becomes, the easier debugging gets later.&lt;/p&gt;




&lt;h2&gt;
  
  
  Documentation Is Part of the Workflow
&lt;/h2&gt;

&lt;p&gt;I used to think documentation was something written after development.&lt;/p&gt;

&lt;p&gt;Now I see it differently.&lt;/p&gt;

&lt;p&gt;Good documentation improves development itself.&lt;/p&gt;

&lt;p&gt;Especially in async environments.&lt;/p&gt;

&lt;p&gt;Even simple things help:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;folder explanations&lt;/li&gt;
&lt;li&gt;API notes&lt;/li&gt;
&lt;li&gt;setup instructions&lt;/li&gt;
&lt;li&gt;hook references&lt;/li&gt;
&lt;li&gt;architecture decisions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When returning to a project after months, documentation saves enormous time.&lt;/p&gt;

&lt;p&gt;This becomes even more important in distributed teams.&lt;/p&gt;




&lt;h2&gt;
  
  
  Frontend Tooling Changed Plugin Development
&lt;/h2&gt;

&lt;p&gt;Modern frontend tooling has improved WordPress plugin workflows significantly.&lt;/p&gt;

&lt;p&gt;Using:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;React&lt;/li&gt;
&lt;li&gt;Vite&lt;/li&gt;
&lt;li&gt;TypeScript&lt;/li&gt;
&lt;li&gt;modular components&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;makes plugin admin interfaces much easier to scale.&lt;/p&gt;

&lt;p&gt;At the same time, WordPress still teaches important lessons about backward compatibility, extensibility, and long term maintenance.&lt;/p&gt;

&lt;p&gt;I think combining modern frontend workflows with WordPress architecture creates very strong engineering foundations.&lt;/p&gt;




&lt;h2&gt;
  
  
  Open Source Changed How I Think About Systems
&lt;/h2&gt;

&lt;p&gt;Publishing code publicly changes development habits.&lt;/p&gt;

&lt;p&gt;You naturally start:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;organizing code better&lt;/li&gt;
&lt;li&gt;documenting decisions&lt;/li&gt;
&lt;li&gt;reducing shortcuts&lt;/li&gt;
&lt;li&gt;improving readability&lt;/li&gt;
&lt;li&gt;thinking about maintainability&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Even small open source projects encourage better engineering discipline.&lt;/p&gt;

&lt;p&gt;That mindset has influenced how I approach plugin systems today.&lt;/p&gt;




&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Improving developer workflows is not about chasing productivity trends.&lt;/p&gt;

&lt;p&gt;It is about building systems that reduce friction over time.&lt;/p&gt;

&lt;p&gt;The longer a project lives, the more important maintainability becomes.&lt;/p&gt;

&lt;p&gt;Small workflow improvements compound:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;cleaner structure&lt;/li&gt;
&lt;li&gt;better tooling&lt;/li&gt;
&lt;li&gt;reusable patterns&lt;/li&gt;
&lt;li&gt;documentation&lt;/li&gt;
&lt;li&gt;automation&lt;/li&gt;
&lt;li&gt;reduced repetition&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;WordPress development taught me that sustainable systems matter more than fast temporary solutions.&lt;/p&gt;

&lt;p&gt;And in long term engineering work, reducing friction is often more valuable than adding complexity.&lt;/p&gt;

</description>
      <category>wordpress</category>
      <category>opensource</category>
      <category>productivity</category>
      <category>webdev</category>
    </item>
    <item>
      <title>What Years of WordPress Development Taught Me About Modern Frontend Systems</title>
      <dc:creator>Kunal Pareek</dc:creator>
      <pubDate>Sat, 16 May 2026 13:18:37 +0000</pubDate>
      <link>https://forem.com/kunal_pareek/what-years-of-wordpress-development-taught-me-about-modern-frontend-systems-4koh</link>
      <guid>https://forem.com/kunal_pareek/what-years-of-wordpress-development-taught-me-about-modern-frontend-systems-4koh</guid>
      <description>&lt;p&gt;A large part of my frontend experience started inside WordPress.&lt;/p&gt;

&lt;p&gt;Themes, plugins, hooks, custom dashboards, admin workflows, template overrides, API integrations, and client driven systems were part of my daily work for years before I started working more deeply with React and Next.js.&lt;/p&gt;

&lt;p&gt;At first, I thought modern frontend development would feel completely different from WordPress development.&lt;/p&gt;

&lt;p&gt;But over time, I realized many of the most valuable lessons I use today actually came from building WordPress systems.&lt;/p&gt;

&lt;p&gt;The tools changed.&lt;/p&gt;

&lt;p&gt;The engineering principles mostly stayed the same.&lt;/p&gt;

&lt;h2&gt;
  
  
  WordPress Taught Me To Build For Real Usage
&lt;/h2&gt;

&lt;p&gt;One thing WordPress teaches very quickly is that real production systems rarely stay clean for long.&lt;/p&gt;

&lt;p&gt;Projects evolve continuously.&lt;/p&gt;

&lt;p&gt;Clients request changes.&lt;br&gt;
Plugins interact unexpectedly.&lt;br&gt;
Requirements shift.&lt;br&gt;
Legacy code remains active for years.&lt;/p&gt;

&lt;p&gt;You learn very quickly that software is not only about shipping features. It is also about maintaining systems over time without creating unnecessary friction.&lt;/p&gt;

&lt;p&gt;That mindset became extremely valuable later while working with React and Next.js applications.&lt;/p&gt;

&lt;p&gt;Modern frontend systems also grow gradually.&lt;/p&gt;

&lt;p&gt;Components expand.&lt;br&gt;
State management becomes more complex.&lt;br&gt;
Business logic spreads across the application.&lt;/p&gt;

&lt;p&gt;The same maintainability problems appear again, only in different forms.&lt;/p&gt;

&lt;h2&gt;
  
  
  Reusability Became More Important Than Speed
&lt;/h2&gt;

&lt;p&gt;Early in my career, I focused heavily on getting features working quickly.&lt;/p&gt;

&lt;p&gt;But after building larger WordPress systems, I started paying much more attention to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;reusable architecture&lt;/li&gt;
&lt;li&gt;modular systems&lt;/li&gt;
&lt;li&gt;predictable structure&lt;/li&gt;
&lt;li&gt;naming consistency&lt;/li&gt;
&lt;li&gt;extensibility&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;because projects rarely stop growing after launch.&lt;/p&gt;

&lt;p&gt;That thinking carried directly into how I now build React and Next.js applications.&lt;/p&gt;

&lt;p&gt;I started treating frontend systems more like long term infrastructure instead of isolated pages.&lt;/p&gt;

&lt;h2&gt;
  
  
  WordPress Hooks Changed The Way I Think About Extensibility
&lt;/h2&gt;

&lt;p&gt;One thing I still appreciate deeply about WordPress is its extensibility model.&lt;/p&gt;

&lt;p&gt;Hooks force you to think carefully about:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;separation of responsibilities&lt;/li&gt;
&lt;li&gt;extensibility points&lt;/li&gt;
&lt;li&gt;integration safety&lt;/li&gt;
&lt;li&gt;backward compatibility&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When I started working with React ecosystems, I noticed similar ideas appearing in different ways through:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;reusable components&lt;/li&gt;
&lt;li&gt;context systems&lt;/li&gt;
&lt;li&gt;composition patterns&lt;/li&gt;
&lt;li&gt;shared hooks&lt;/li&gt;
&lt;li&gt;modular architecture&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The implementation style changed, but the underlying engineering mindset felt surprisingly familiar.&lt;/p&gt;

&lt;h2&gt;
  
  
  Modern Frontend Development Increased My Focus On Architecture
&lt;/h2&gt;

&lt;p&gt;Working with Next.js pushed me to think more carefully about frontend architecture itself.&lt;/p&gt;

&lt;p&gt;I started paying more attention to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;rendering boundaries&lt;/li&gt;
&lt;li&gt;API structure&lt;/li&gt;
&lt;li&gt;route organization&lt;/li&gt;
&lt;li&gt;hydration behavior&lt;/li&gt;
&lt;li&gt;bundle optimization&lt;/li&gt;
&lt;li&gt;caching strategies&lt;/li&gt;
&lt;li&gt;deployment workflows&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These were areas I rarely had to think deeply about in traditional WordPress theme development.&lt;/p&gt;

&lt;p&gt;Modern frontend tooling exposes different engineering problems, and solving those problems improved the way I approach systems overall.&lt;/p&gt;

&lt;h2&gt;
  
  
  But WordPress Experience Continued Helping Me
&lt;/h2&gt;

&lt;p&gt;Even after working more deeply with React and Next.js, my WordPress background kept helping me constantly.&lt;/p&gt;

&lt;p&gt;Especially in areas like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;maintainability&lt;/li&gt;
&lt;li&gt;debugging production issues&lt;/li&gt;
&lt;li&gt;CMS workflows&lt;/li&gt;
&lt;li&gt;plugin architecture&lt;/li&gt;
&lt;li&gt;client facing systems&lt;/li&gt;
&lt;li&gt;long term project stability&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A lot of frontend applications look impressive initially but become difficult to maintain over time.&lt;/p&gt;

&lt;p&gt;WordPress development taught me to value stability and clarity much more than constantly chasing complexity.&lt;/p&gt;

&lt;p&gt;That mindset still influences how I structure frontend systems today.&lt;/p&gt;

&lt;h2&gt;
  
  
  Frontend Systems Are Not Only About UI
&lt;/h2&gt;

&lt;p&gt;One thing that changed significantly while working across WordPress and modern frontend frameworks was my understanding of frontend engineering itself.&lt;/p&gt;

&lt;p&gt;Frontend systems are not only about visuals anymore.&lt;/p&gt;

&lt;p&gt;You start thinking much more about:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;data flow&lt;/li&gt;
&lt;li&gt;API boundaries&lt;/li&gt;
&lt;li&gt;performance&lt;/li&gt;
&lt;li&gt;caching&lt;/li&gt;
&lt;li&gt;deployment&lt;/li&gt;
&lt;li&gt;scalability&lt;/li&gt;
&lt;li&gt;state management&lt;/li&gt;
&lt;li&gt;maintainability&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That naturally pushed me toward broader full stack development over time.&lt;/p&gt;

&lt;p&gt;The boundary between frontend and backend became much smaller.&lt;/p&gt;

&lt;h2&gt;
  
  
  Different Tools Solve Different Problems
&lt;/h2&gt;

&lt;p&gt;I do not really see WordPress and Next.js as competing technologies.&lt;/p&gt;

&lt;p&gt;They solve different kinds of problems.&lt;/p&gt;

&lt;p&gt;WordPress taught me:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;practical maintainability&lt;/li&gt;
&lt;li&gt;extensibility&lt;/li&gt;
&lt;li&gt;CMS architecture&lt;/li&gt;
&lt;li&gt;production stability&lt;/li&gt;
&lt;li&gt;plugin ecosystems&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Next.js taught me:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;frontend system architecture&lt;/li&gt;
&lt;li&gt;rendering strategies&lt;/li&gt;
&lt;li&gt;scalable UI composition&lt;/li&gt;
&lt;li&gt;modern deployment workflows&lt;/li&gt;
&lt;li&gt;application level optimization&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Working with both gave me a broader understanding of how frontend systems evolve as projects grow.&lt;/p&gt;

&lt;h2&gt;
  
  
  Simplicity Became More Valuable
&lt;/h2&gt;

&lt;p&gt;One lesson that stayed consistent across both ecosystems is that simplicity matters more than making systems look advanced.&lt;/p&gt;

&lt;p&gt;The projects that survive long term usually prioritize:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;readability&lt;/li&gt;
&lt;li&gt;maintainability&lt;/li&gt;
&lt;li&gt;clear structure&lt;/li&gt;
&lt;li&gt;predictable behavior&lt;/li&gt;
&lt;li&gt;good communication&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;instead of unnecessary architectural complexity.&lt;/p&gt;

&lt;p&gt;That became much more important to me over time than choosing a specific framework.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Looking back, years of WordPress development shaped the way I approach frontend engineering much more than I originally expected.&lt;/p&gt;

&lt;p&gt;Working with React and Next.js introduced me to new frontend patterns and modern tooling, but many of the core engineering lessons still came from building maintainable WordPress systems in real production environments.&lt;/p&gt;

&lt;p&gt;The technologies evolved, but the fundamentals remained surprisingly consistent:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;build maintainable systems&lt;/li&gt;
&lt;li&gt;keep architecture understandable&lt;/li&gt;
&lt;li&gt;reduce developer friction&lt;/li&gt;
&lt;li&gt;optimize for long term usability&lt;/li&gt;
&lt;li&gt;write software that other developers can work with confidently later&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those are the lessons that stayed with me the most across both ecosystems.&lt;/p&gt;

</description>
      <category>wordpress</category>
      <category>react</category>
      <category>nextjs</category>
      <category>webdev</category>
    </item>
    <item>
      <title>UTM Tracking at Scale: Building a CRM Integration Pipeline for WordPress</title>
      <dc:creator>Kunal Pareek</dc:creator>
      <pubDate>Sat, 16 May 2026 13:05:30 +0000</pubDate>
      <link>https://forem.com/kunal_pareek/utm-tracking-at-scale-building-a-crm-integration-pipeline-for-wordpress-3206</link>
      <guid>https://forem.com/kunal_pareek/utm-tracking-at-scale-building-a-crm-integration-pipeline-for-wordpress-3206</guid>
      <description>&lt;h2&gt;
  
  
  Why I Built This Plugin
&lt;/h2&gt;

&lt;p&gt;This plugin started as a practical solution to a real problem I kept seeing in WordPress projects.&lt;/p&gt;

&lt;p&gt;Marketing teams wanted attribution data.&lt;br&gt;
Developers wanted flexibility.&lt;br&gt;
Clients wanted ownership of their data.&lt;/p&gt;

&lt;p&gt;Most existing solutions either depended heavily on third party SaaS platforms or became difficult to customize once workflows became more complex.&lt;/p&gt;

&lt;p&gt;So I started building a lightweight tracking system directly inside WordPress.&lt;/p&gt;

&lt;p&gt;GitHub Repository:&lt;br&gt;
&lt;a href="https://github.com/KunalPareek21/crm-utm-tracker" rel="noopener noreferrer"&gt;https://github.com/KunalPareek21/crm-utm-tracker&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The goal was simple:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;capture UTM data reliably&lt;/li&gt;
&lt;li&gt;store it in a structured way&lt;/li&gt;
&lt;li&gt;expose it through a clean REST API&lt;/li&gt;
&lt;li&gt;visualize analytics directly inside WordPress&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What looked simple at first quickly became a much deeper engineering problem.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tracking Systems Fail Quietly
&lt;/h2&gt;

&lt;p&gt;Pages still load.&lt;br&gt;
Forms still work.&lt;br&gt;
Leads still arrive.&lt;/p&gt;

&lt;p&gt;But attribution slowly becomes inaccurate because of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;redirects&lt;/li&gt;
&lt;li&gt;inconsistent parameters&lt;/li&gt;
&lt;li&gt;frontend integration issues&lt;/li&gt;
&lt;li&gt;caching layers&lt;/li&gt;
&lt;li&gt;unreliable session handling&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That forced me to think more carefully about reliability instead of just features.&lt;/p&gt;

&lt;p&gt;I wanted the plugin to work predictably even under messy real world conditions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Thinking Beyond Features
&lt;/h2&gt;

&lt;p&gt;One of the biggest lessons from building this project was understanding how much maintainability matters in WordPress plugin development.&lt;/p&gt;

&lt;p&gt;As the codebase grew, I stopped thinking only in terms of functionality and started thinking more about:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;separation of responsibilities&lt;/li&gt;
&lt;li&gt;predictable data flow&lt;/li&gt;
&lt;li&gt;extensibility&lt;/li&gt;
&lt;li&gt;debugging visibility&lt;/li&gt;
&lt;li&gt;long term maintenance&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The plugin eventually evolved into a more structured system with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a custom post type for tracking links&lt;/li&gt;
&lt;li&gt;REST API endpoints for external applications&lt;/li&gt;
&lt;li&gt;analytics aggregation queries&lt;/li&gt;
&lt;li&gt;AJAX powered dashboards&lt;/li&gt;
&lt;li&gt;API key management&lt;/li&gt;
&lt;li&gt;rate limiting&lt;/li&gt;
&lt;li&gt;sanitization and capability checks&lt;/li&gt;
&lt;li&gt;modular admin architecture&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I tried to keep the architecture understandable instead of overly abstract.&lt;/p&gt;

&lt;p&gt;WordPress projects often live for years.&lt;/p&gt;

&lt;p&gt;Different developers touch the same codebase over time.&lt;br&gt;
Clients request modifications months later.&lt;br&gt;
Systems grow gradually instead of being rewritten from scratch.&lt;/p&gt;

&lt;p&gt;That changes how you think about engineering decisions.&lt;/p&gt;

&lt;p&gt;A plugin is not only code that works today.&lt;br&gt;
It is code that somebody can still understand later.&lt;/p&gt;

&lt;h2&gt;
  
  
  Backend Engineering Lessons
&lt;/h2&gt;

&lt;p&gt;Working on this project improved how I approach backend systems in general.&lt;/p&gt;

&lt;p&gt;I spent a lot of time thinking about:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;request validation&lt;/li&gt;
&lt;li&gt;secure REST endpoints&lt;/li&gt;
&lt;li&gt;indexed database queries&lt;/li&gt;
&lt;li&gt;API design&lt;/li&gt;
&lt;li&gt;rate limiting&lt;/li&gt;
&lt;li&gt;structured analytics storage&lt;/li&gt;
&lt;li&gt;performance under larger datasets&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This was also one of the first projects where I started caring deeply about developer experience inside WordPress admin panels.&lt;/p&gt;

&lt;p&gt;I did not want the dashboard to feel like an afterthought.&lt;/p&gt;

&lt;p&gt;The plugin includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;analytics charts&lt;/li&gt;
&lt;li&gt;live AJAX filters&lt;/li&gt;
&lt;li&gt;detailed per-link views&lt;/li&gt;
&lt;li&gt;conversion metrics&lt;/li&gt;
&lt;li&gt;tracking summaries&lt;/li&gt;
&lt;li&gt;copyable tracking URLs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;not because dashboards need visual polish for marketing screenshots, but because internal tools become easier to use when information is structured clearly.&lt;/p&gt;

&lt;h2&gt;
  
  
  Keeping Data Inside WordPress
&lt;/h2&gt;

&lt;p&gt;Another important part of this project was keeping ownership of data inside WordPress itself.&lt;/p&gt;

&lt;p&gt;A lot of modern tooling pushes users toward external analytics platforms for even basic attribution workflows.&lt;/p&gt;

&lt;p&gt;I wanted to explore what a self hosted approach could look like when combined with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;REST APIs&lt;/li&gt;
&lt;li&gt;modern admin interfaces&lt;/li&gt;
&lt;li&gt;structured database design&lt;/li&gt;
&lt;li&gt;frontend charting libraries&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;while still respecting WordPress conventions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Small Details Matter
&lt;/h2&gt;

&lt;p&gt;This project also taught me how important small implementation details are.&lt;/p&gt;

&lt;p&gt;Things like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;sanitizing metadata&lt;/li&gt;
&lt;li&gt;limiting payload sizes&lt;/li&gt;
&lt;li&gt;protecting AJAX requests&lt;/li&gt;
&lt;li&gt;validating capabilities&lt;/li&gt;
&lt;li&gt;handling uninstall cleanup properly&lt;/li&gt;
&lt;li&gt;indexing analytical queries&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;become very important once software starts handling real usage instead of isolated local testing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Looking back, this plugin became much more than a tracking tool for me.&lt;/p&gt;

&lt;p&gt;It was one of the first projects that pushed me deeper into:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;maintainable plugin architecture&lt;/li&gt;
&lt;li&gt;backend engineering&lt;/li&gt;
&lt;li&gt;API driven systems&lt;/li&gt;
&lt;li&gt;analytics workflows&lt;/li&gt;
&lt;li&gt;production reliability&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;and it changed how I think about building software inside the WordPress ecosystem.&lt;/p&gt;

&lt;p&gt;Open source projects like this are valuable because they force you to think beyond demos and isolated features.&lt;/p&gt;

&lt;p&gt;You start thinking more about:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;maintainability&lt;/li&gt;
&lt;li&gt;compatibility&lt;/li&gt;
&lt;li&gt;upgrades&lt;/li&gt;
&lt;li&gt;developer handoff&lt;/li&gt;
&lt;li&gt;long term usability&lt;/li&gt;
&lt;li&gt;operational reliability&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those are the parts of engineering that become increasingly important as projects grow.&lt;/p&gt;

</description>
      <category>wordpress</category>
      <category>opensource</category>
      <category>webdev</category>
      <category>analytics</category>
    </item>
    <item>
      <title>Building Maintainable WordPress Plugin and Theme Systems</title>
      <dc:creator>Kunal Pareek</dc:creator>
      <pubDate>Sat, 16 May 2026 12:53:18 +0000</pubDate>
      <link>https://forem.com/kunal_pareek/building-maintainable-wordpress-plugin-and-theme-systems-1n23</link>
      <guid>https://forem.com/kunal_pareek/building-maintainable-wordpress-plugin-and-theme-systems-1n23</guid>
      <description>&lt;p&gt;Most WordPress discussions online focus on quick solutions, page builders, or shipping features fast. But after working on real client projects, internal tooling, staffing systems, dashboards, and reusable architectures, I realized long term maintainability matters much more than short term speed.&lt;/p&gt;

&lt;p&gt;A WordPress project may start simple, but complexity grows very quickly.&lt;/p&gt;

&lt;p&gt;New plugins get added.&lt;br&gt;
Custom hooks increase.&lt;br&gt;
Business logic expands.&lt;br&gt;
API integrations appear.&lt;br&gt;
Frontend requirements evolve.&lt;/p&gt;

&lt;p&gt;Without structure, projects slowly become difficult to debug, extend, and maintain.&lt;/p&gt;

&lt;p&gt;Over the years, my approach to WordPress development changed completely. I moved from building isolated websites to thinking more about reusable systems, developer experience, scalability, and long term maintainability.&lt;/p&gt;

&lt;h2&gt;
  
  
  WordPress Projects Grow Faster Than Expected
&lt;/h2&gt;

&lt;p&gt;Most projects begin with a small scope.&lt;/p&gt;

&lt;p&gt;A theme.&lt;br&gt;
A few plugins.&lt;br&gt;
Some custom fields.&lt;br&gt;
A contact form.&lt;/p&gt;

&lt;p&gt;But real projects rarely stay that small.&lt;/p&gt;

&lt;p&gt;Soon the system needs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;custom workflows&lt;/li&gt;
&lt;li&gt;admin utilities&lt;/li&gt;
&lt;li&gt;automation&lt;/li&gt;
&lt;li&gt;external APIs&lt;/li&gt;
&lt;li&gt;analytics dashboards&lt;/li&gt;
&lt;li&gt;reusable frontend components&lt;/li&gt;
&lt;li&gt;internal business tools&lt;/li&gt;
&lt;li&gt;role based permissions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At that point, random snippets and tightly coupled logic start creating problems.&lt;/p&gt;

&lt;p&gt;One issue I noticed early in my career was that many WordPress projects are built only for immediate delivery. Very little attention is given to how the system will evolve six months later.&lt;/p&gt;

&lt;p&gt;That becomes expensive over time.&lt;/p&gt;

&lt;h2&gt;
  
  
  Maintainability Is a Feature
&lt;/h2&gt;

&lt;p&gt;One thing remote engineering taught me is that maintainability is not optional.&lt;/p&gt;

&lt;p&gt;Code should remain understandable long after it is written.&lt;/p&gt;

&lt;p&gt;In many real projects, the original developer may not be available later. Another engineer should still be able to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;understand the architecture&lt;/li&gt;
&lt;li&gt;debug problems safely&lt;/li&gt;
&lt;li&gt;extend functionality&lt;/li&gt;
&lt;li&gt;trace business logic&lt;/li&gt;
&lt;li&gt;work confidently inside the system&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;without needing long explanations.&lt;/p&gt;

&lt;p&gt;That is why I now prioritize:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;predictable folder structures&lt;/li&gt;
&lt;li&gt;reusable plugin architecture&lt;/li&gt;
&lt;li&gt;isolated business logic&lt;/li&gt;
&lt;li&gt;modular utilities&lt;/li&gt;
&lt;li&gt;consistent naming conventions&lt;/li&gt;
&lt;li&gt;internal documentation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Good architecture reduces friction for future development.&lt;/p&gt;

&lt;h2&gt;
  
  
  Plugins Should Have Clear Responsibilities
&lt;/h2&gt;

&lt;p&gt;Earlier in my journey, I used to place too much functionality inside single plugins.&lt;/p&gt;

&lt;p&gt;Over time I learned that focused plugins are easier to maintain.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;analytics logic should remain isolated&lt;/li&gt;
&lt;li&gt;API integrations should stay modular&lt;/li&gt;
&lt;li&gt;admin utilities should not control frontend rendering&lt;/li&gt;
&lt;li&gt;automation systems should remain independent&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Smaller systems are easier to debug, reuse, and extend.&lt;/p&gt;

&lt;p&gt;This becomes especially important when client requirements change repeatedly during development.&lt;/p&gt;

&lt;h2&gt;
  
  
  Reusability Saves Huge Amounts of Time
&lt;/h2&gt;

&lt;p&gt;One thing I genuinely enjoy building now is reusable infrastructure.&lt;/p&gt;

&lt;p&gt;Instead of rebuilding the same functionality for every project, I prefer creating:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;reusable hooks&lt;/li&gt;
&lt;li&gt;internal helper utilities&lt;/li&gt;
&lt;li&gt;plugin starter systems&lt;/li&gt;
&lt;li&gt;flexible admin panels&lt;/li&gt;
&lt;li&gt;API wrapper layers&lt;/li&gt;
&lt;li&gt;reusable frontend components&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This improves consistency across projects and reduces repetitive work.&lt;/p&gt;

&lt;p&gt;It also helps new developers onboard faster because the structure feels familiar.&lt;/p&gt;

&lt;h2&gt;
  
  
  Theme Development Should Stay Predictable
&lt;/h2&gt;

&lt;p&gt;One major issue in older WordPress projects is mixing everything together.&lt;/p&gt;

&lt;p&gt;Themes often contain:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;business logic&lt;/li&gt;
&lt;li&gt;API calls&lt;/li&gt;
&lt;li&gt;frontend rendering&lt;/li&gt;
&lt;li&gt;utility functions&lt;/li&gt;
&lt;li&gt;admin workflows&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;inside the same files.&lt;/p&gt;

&lt;p&gt;That structure becomes difficult to scale.&lt;/p&gt;

&lt;p&gt;Now I try to separate concerns more carefully.&lt;/p&gt;

&lt;p&gt;Business logic stays isolated.&lt;br&gt;
Frontend rendering remains predictable.&lt;br&gt;
Utilities stay reusable.&lt;br&gt;
API integrations remain modular.&lt;/p&gt;

&lt;p&gt;Even when using traditional WordPress themes, modern engineering practices improve maintainability significantly.&lt;/p&gt;

&lt;h2&gt;
  
  
  Internal Tooling Is Extremely Valuable
&lt;/h2&gt;

&lt;p&gt;One thing I learned from production systems is that internal tools often create more long term value than public features.&lt;/p&gt;

&lt;p&gt;Simple utilities can save teams hours every week.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;workflow dashboards&lt;/li&gt;
&lt;li&gt;reusable admin systems&lt;/li&gt;
&lt;li&gt;automation helpers&lt;/li&gt;
&lt;li&gt;deployment utilities&lt;/li&gt;
&lt;li&gt;API monitoring tools&lt;/li&gt;
&lt;li&gt;staffing management systems&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;may never appear publicly, but they improve operations constantly.&lt;/p&gt;

&lt;p&gt;I enjoy building these systems because they simplify workflows and reduce developer friction directly.&lt;/p&gt;

&lt;h2&gt;
  
  
  Simplicity Matters More Than Clever Architecture
&lt;/h2&gt;

&lt;p&gt;Modern development moves very fast.&lt;/p&gt;

&lt;p&gt;Every few months there is a new framework, pattern, or architecture trend. But most long term projects still succeed because of fundamentals.&lt;/p&gt;

&lt;p&gt;Things like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;readable code&lt;/li&gt;
&lt;li&gt;clear communication&lt;/li&gt;
&lt;li&gt;reusable systems&lt;/li&gt;
&lt;li&gt;performance awareness&lt;/li&gt;
&lt;li&gt;consistency&lt;/li&gt;
&lt;li&gt;documentation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;matter more than trying to make systems look overly advanced.&lt;/p&gt;

&lt;p&gt;I prefer building software that remains understandable months later instead of systems that only look impressive during initial development.&lt;/p&gt;

&lt;h2&gt;
  
  
  Performance Is Part of Maintainability
&lt;/h2&gt;

&lt;p&gt;As projects grow, performance problems usually appear slowly.&lt;/p&gt;

&lt;p&gt;Too many plugins.&lt;br&gt;
Heavy queries.&lt;br&gt;
Duplicate requests.&lt;br&gt;
Unnecessary dependencies.&lt;br&gt;
Large frontend bundles.&lt;/p&gt;

&lt;p&gt;Over time these issues create maintenance problems.&lt;/p&gt;

&lt;p&gt;That is why I now pay much more attention to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;reducing dependencies&lt;/li&gt;
&lt;li&gt;optimizing API usage&lt;/li&gt;
&lt;li&gt;minimizing plugin conflicts&lt;/li&gt;
&lt;li&gt;improving frontend performance&lt;/li&gt;
&lt;li&gt;simplifying rendering logic&lt;/li&gt;
&lt;li&gt;avoiding unnecessary complexity&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Fast systems are usually easier to maintain too.&lt;/p&gt;

&lt;h2&gt;
  
  
  Documentation Is Engineering Work
&lt;/h2&gt;

&lt;p&gt;One mindset that changed my workflow completely was treating documentation as part of development itself.&lt;/p&gt;

&lt;p&gt;Good documentation explains:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;why something exists&lt;/li&gt;
&lt;li&gt;expected behavior&lt;/li&gt;
&lt;li&gt;edge cases&lt;/li&gt;
&lt;li&gt;business rules&lt;/li&gt;
&lt;li&gt;API structures&lt;/li&gt;
&lt;li&gt;integration limitations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This becomes especially important in WordPress environments where multiple systems interact together.&lt;/p&gt;

&lt;p&gt;Without documentation, even small updates become risky later.&lt;/p&gt;

&lt;h2&gt;
  
  
  WordPress Is Still Extremely Powerful
&lt;/h2&gt;

&lt;p&gt;Sometimes developers underestimate WordPress because they only associate it with simple websites or page builders.&lt;/p&gt;

&lt;p&gt;But WordPress can still power:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;internal business systems&lt;/li&gt;
&lt;li&gt;scalable publishing platforms&lt;/li&gt;
&lt;li&gt;custom workflows&lt;/li&gt;
&lt;li&gt;SaaS dashboards&lt;/li&gt;
&lt;li&gt;API driven applications&lt;/li&gt;
&lt;li&gt;headless frontend systems&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;when engineered properly.&lt;/p&gt;

&lt;p&gt;The challenge is rarely WordPress itself.&lt;/p&gt;

&lt;p&gt;The challenge is architecture quality and maintainability.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;My approach to WordPress development changed a lot after working on larger systems and remote engineering teams.&lt;/p&gt;

&lt;p&gt;I still enjoy building plugins and themes, but now I think much more about:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;maintainability&lt;/li&gt;
&lt;li&gt;scalability&lt;/li&gt;
&lt;li&gt;developer experience&lt;/li&gt;
&lt;li&gt;documentation&lt;/li&gt;
&lt;li&gt;reusable systems&lt;/li&gt;
&lt;li&gt;long term clarity&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Good engineering is not about making systems look complicated.&lt;/p&gt;

&lt;p&gt;It is about building software that remains understandable, practical, scalable, and maintainable long after the first deployment.&lt;/p&gt;

</description>
      <category>wordpress</category>
      <category>opensource</category>
      <category>webdev</category>
      <category>architecture</category>
    </item>
    <item>
      <title>Async-First Engineering Culture for Remote Teams</title>
      <dc:creator>Kunal Pareek</dc:creator>
      <pubDate>Sat, 16 May 2026 12:36:02 +0000</pubDate>
      <link>https://forem.com/kunal_pareek/async-first-engineering-culture-for-remote-teams-5fgm</link>
      <guid>https://forem.com/kunal_pareek/async-first-engineering-culture-for-remote-teams-5fgm</guid>
      <description>&lt;p&gt;Most discussions around remote engineering focus on meetings, productivity hacks, or tools. But after working with distributed teams on WordPress platforms, internal tooling, frontend dashboards, SaaS systems, and API integrations, I realized async work is really about clarity.&lt;/p&gt;

&lt;p&gt;Good async teams do not depend on constant calls. They depend on understandable systems, clear communication, documentation, and code that another developer can work on without confusion months later.&lt;/p&gt;

&lt;p&gt;I started my journey building WordPress websites and custom plugins. Over time, that evolved into building reusable systems, React applications, Next.js dashboards, backend APIs, and internal tools for real client workflows. Working remotely with globally distributed teams changed the way I think about engineering completely.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Async First Actually Means
&lt;/h2&gt;

&lt;p&gt;A lot of people think async work simply means working from home or avoiding meetings.&lt;/p&gt;

&lt;p&gt;That is not really true.&lt;/p&gt;

&lt;p&gt;Async first engineering means creating workflows where work can continue without needing everyone online at the same time.&lt;/p&gt;

&lt;p&gt;In many teams, developers work across different time zones. Designers, frontend developers, backend engineers, project managers, and clients may all work on different schedules. If progress depends completely on live communication, projects slow down very quickly.&lt;/p&gt;

&lt;p&gt;That is why async teams focus heavily on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;documentation&lt;/li&gt;
&lt;li&gt;communication clarity&lt;/li&gt;
&lt;li&gt;predictable workflows&lt;/li&gt;
&lt;li&gt;maintainable systems&lt;/li&gt;
&lt;li&gt;written discussions&lt;/li&gt;
&lt;li&gt;proper context sharing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Async work is less about “less communication” and more about “better communication”.&lt;/p&gt;

&lt;h2&gt;
  
  
  Most Remote Work Happens Through Written Communication
&lt;/h2&gt;

&lt;p&gt;One thing that surprised me while working remotely was how much engineering work happens through writing.&lt;/p&gt;

&lt;p&gt;A normal day often includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Slack discussions&lt;/li&gt;
&lt;li&gt;GitHub pull requests&lt;/li&gt;
&lt;li&gt;issue comments&lt;/li&gt;
&lt;li&gt;technical documentation&lt;/li&gt;
&lt;li&gt;API explanations&lt;/li&gt;
&lt;li&gt;bug reports&lt;/li&gt;
&lt;li&gt;deployment notes&lt;/li&gt;
&lt;li&gt;project planning updates&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Sometimes a properly written message solves a problem faster than a meeting.&lt;/p&gt;

&lt;p&gt;For example, sending:&lt;br&gt;
“API issue fixed”&lt;/p&gt;

&lt;p&gt;does not help much.&lt;/p&gt;

&lt;p&gt;But explaining:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;what was broken&lt;/li&gt;
&lt;li&gt;why it happened&lt;/li&gt;
&lt;li&gt;what changed&lt;/li&gt;
&lt;li&gt;what files were affected&lt;/li&gt;
&lt;li&gt;whether anything else may break&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;creates long term clarity for the team.&lt;/p&gt;

&lt;p&gt;That small difference becomes extremely important in async environments.&lt;/p&gt;

&lt;h2&gt;
  
  
  Documentation Is Part of Engineering
&lt;/h2&gt;

&lt;p&gt;Earlier in my career, I used to think documentation was optional.&lt;/p&gt;

&lt;p&gt;But while working on larger WordPress systems, custom plugins, and internal tools, I realized undocumented systems become difficult to maintain very quickly.&lt;/p&gt;

&lt;p&gt;In WordPress environments especially, multiple plugins, hooks, APIs, cron jobs, and custom logic often work together. Without documentation, even small changes become risky.&lt;/p&gt;

&lt;p&gt;Now I try to document:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;why something exists&lt;/li&gt;
&lt;li&gt;expected behavior&lt;/li&gt;
&lt;li&gt;edge cases&lt;/li&gt;
&lt;li&gt;dependencies&lt;/li&gt;
&lt;li&gt;API response structure&lt;/li&gt;
&lt;li&gt;business logic decisions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Documentation is not separate from engineering.&lt;/p&gt;

&lt;p&gt;It is part of engineering.&lt;/p&gt;

&lt;p&gt;Good documentation reduces developer friction and helps future contributors understand the system faster.&lt;/p&gt;

&lt;h2&gt;
  
  
  Building Systems That Other Developers Can Understand
&lt;/h2&gt;

&lt;p&gt;One thing I value a lot now is maintainability.&lt;/p&gt;

&lt;p&gt;I enjoy building systems that feel predictable and understandable instead of overly complicated.&lt;/p&gt;

&lt;p&gt;In many real world projects, the best solution is usually not the smartest looking architecture. It is the one the next developer can maintain confidently.&lt;/p&gt;

&lt;p&gt;That developer might join the project months later and know nothing about the original implementation.&lt;/p&gt;

&lt;p&gt;Good systems should help developers understand:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;project structure&lt;/li&gt;
&lt;li&gt;reusable components&lt;/li&gt;
&lt;li&gt;API flow&lt;/li&gt;
&lt;li&gt;naming conventions&lt;/li&gt;
&lt;li&gt;business logic&lt;/li&gt;
&lt;li&gt;deployment process&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;without requiring long explanations every time.&lt;/p&gt;

&lt;p&gt;This became especially important while building:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;staffing platforms&lt;/li&gt;
&lt;li&gt;internal dashboards&lt;/li&gt;
&lt;li&gt;WordPress utility systems&lt;/li&gt;
&lt;li&gt;reusable frontend architectures&lt;/li&gt;
&lt;li&gt;custom API integrations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Complexity grows naturally over time. Good engineering keeps that complexity manageable.&lt;/p&gt;

&lt;h2&gt;
  
  
  Simplicity Is More Valuable Than Over Engineering
&lt;/h2&gt;

&lt;p&gt;Modern development changes very fast.&lt;/p&gt;

&lt;p&gt;Every few months there is a new framework, architecture trend, or “best practice”. But most production systems still succeed because of fundamentals.&lt;/p&gt;

&lt;p&gt;Things like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;readable code&lt;/li&gt;
&lt;li&gt;consistent structure&lt;/li&gt;
&lt;li&gt;performance awareness&lt;/li&gt;
&lt;li&gt;proper debugging&lt;/li&gt;
&lt;li&gt;reusable systems&lt;/li&gt;
&lt;li&gt;communication clarity&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;matter more than trying to make everything look advanced.&lt;/p&gt;

&lt;p&gt;I prefer building systems that remain understandable six months later instead of systems that look impressive only during initial development.&lt;/p&gt;

&lt;p&gt;That mindset helped me a lot while working with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;React&lt;/li&gt;
&lt;li&gt;Next.js&lt;/li&gt;
&lt;li&gt;Vue.js&lt;/li&gt;
&lt;li&gt;TypeScript&lt;/li&gt;
&lt;li&gt;Node.js&lt;/li&gt;
&lt;li&gt;PHP&lt;/li&gt;
&lt;li&gt;WordPress&lt;/li&gt;
&lt;li&gt;jQuery&lt;/li&gt;
&lt;li&gt;MongoDB&lt;/li&gt;
&lt;li&gt;MySQL&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Every technology has tradeoffs. Understanding when to keep things simple is an important engineering skill.&lt;/p&gt;

&lt;h2&gt;
  
  
  Internal Tools Often Matter More Than Public Features
&lt;/h2&gt;

&lt;p&gt;One interesting thing I learned while building internal tooling is that small utilities can save huge amounts of time for teams.&lt;/p&gt;

&lt;p&gt;Sometimes a simple dashboard, reusable component system, or automation utility improves workflow more than adding new frontend features.&lt;/p&gt;

&lt;p&gt;I genuinely enjoy building:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;admin systems&lt;/li&gt;
&lt;li&gt;workflow utilities&lt;/li&gt;
&lt;li&gt;internal dashboards&lt;/li&gt;
&lt;li&gt;reusable hooks&lt;/li&gt;
&lt;li&gt;plugin tooling&lt;/li&gt;
&lt;li&gt;automation scripts&lt;/li&gt;
&lt;li&gt;API helper systems&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;because they improve developer experience directly.&lt;/p&gt;

&lt;p&gt;Good internal tools reduce repetitive work and make teams faster without creating unnecessary complexity.&lt;/p&gt;

&lt;h2&gt;
  
  
  Async Work Requires Ownership
&lt;/h2&gt;

&lt;p&gt;One major difference in remote environments is responsibility.&lt;/p&gt;

&lt;p&gt;When nobody is physically sitting near you, engineers need to communicate clearly and manage their work properly.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;updating progress regularly&lt;/li&gt;
&lt;li&gt;documenting blockers&lt;/li&gt;
&lt;li&gt;writing understandable pull requests&lt;/li&gt;
&lt;li&gt;testing changes properly&lt;/li&gt;
&lt;li&gt;keeping communication transparent&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Async work rewards ownership.&lt;/p&gt;

&lt;p&gt;A developer who communicates clearly and keeps systems maintainable becomes extremely valuable in distributed teams.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Personal Workflow
&lt;/h2&gt;

&lt;p&gt;Over time, a few habits improved the way I work remotely:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;writing detailed pull request descriptions&lt;/li&gt;
&lt;li&gt;keeping commits focused&lt;/li&gt;
&lt;li&gt;avoiding unnecessary dependencies&lt;/li&gt;
&lt;li&gt;documenting API behavior properly&lt;/li&gt;
&lt;li&gt;organizing reusable components early&lt;/li&gt;
&lt;li&gt;reducing technical debt continuously&lt;/li&gt;
&lt;li&gt;communicating blockers instead of silently debugging for hours&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are small habits, but together they improve team collaboration significantly.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Remote engineering is not only about working from a different location.&lt;/p&gt;

&lt;p&gt;It changes how you think about systems, communication, collaboration, and long term maintainability.&lt;/p&gt;

&lt;p&gt;For me, async first development created a much stronger focus on clarity and simplicity.&lt;/p&gt;

&lt;p&gt;I still enjoy building WordPress systems, frontend applications, APIs, dashboards, and internal tooling, but now I think much more about how those systems will be understood and maintained by future developers.&lt;/p&gt;

&lt;p&gt;That future developer might even be me six months later.&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>remote</category>
      <category>teams</category>
      <category>career</category>
    </item>
  </channel>
</rss>
