<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Muhammd Rehman Tahir</title>
    <description>The latest articles on DEV Community by Muhammd Rehman Tahir (@muhammd_rehman_tahir).</description>
    <link>https://dev.to/muhammd_rehman_tahir</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3751251%2Ffb22a380-42f4-4b80-a0ff-0e9225cce1cd.jpeg</url>
      <title>DEV Community: Muhammd Rehman Tahir</title>
      <link>https://dev.to/muhammd_rehman_tahir</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/muhammd_rehman_tahir"/>
    <language>en</language>
    <item>
      <title>FlowBased.NetCore v1.0.1 — Enterprise Documentation &amp; Business Flow Management for .NET</title>
      <dc:creator>Muhammd Rehman Tahir</dc:creator>
      <pubDate>Thu, 25 Jun 2026 17:39:41 +0000</pubDate>
      <link>https://dev.to/muhammd_rehman_tahir/flowbasednetcore-v101-enterprise-documentation-business-flow-management-for-net-51ep</link>
      <guid>https://dev.to/muhammd_rehman_tahir/flowbasednetcore-v101-enterprise-documentation-business-flow-management-for-net-51ep</guid>
      <description>&lt;p&gt;I'm excited to announce the release of &lt;strong&gt;FlowBased.NetCore v1.0.1&lt;/strong&gt;, now available on NuGet!&lt;/p&gt;

&lt;h2&gt;
  
  
  What is FlowBased.NetCore?
&lt;/h2&gt;

&lt;p&gt;FlowBased.NetCore is a plug-and-play documentation and business flow management framework for ASP.NET Core applications. It gives you an &lt;strong&gt;embedded enterprise-grade documentation portal&lt;/strong&gt; with zero frontend setup — just two lines of code and you're running.&lt;/p&gt;

&lt;h3&gt;
  
  
  Two-line integration
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Services&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;AddFlowBased&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;UseFlowBased&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's it. You now have:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A full admin dashboard with CRUD for applications, modules, and flows&lt;/li&gt;
&lt;li&gt;A public documentation portal (separately themed, independently authenticated)&lt;/li&gt;
&lt;li&gt;Markdown/HTML editing with a rich toolbar&lt;/li&gt;
&lt;li&gt;File attachments with drag-and-drop&lt;/li&gt;
&lt;li&gt;Automatic versioning on every edit&lt;/li&gt;
&lt;li&gt;Full-text search&lt;/li&gt;
&lt;li&gt;Technical dependency mapping (APIs, services, repositories, database tables)&lt;/li&gt;
&lt;li&gt;Code snippet support&lt;/li&gt;
&lt;li&gt;Dark mode&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What's New in v1.0.1
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Annotation-Driven Discovery
&lt;/h3&gt;

&lt;p&gt;This release introduces three new attribute types that make it even easier to document and discover your application's architecture:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;[BusinessFlow]&lt;/code&gt;&lt;/strong&gt; — Mark classes that orchestrate business processes (e.g., &lt;code&gt;CheckoutFlow&lt;/code&gt;, &lt;code&gt;RefundFlow&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;[Integration]&lt;/code&gt;&lt;/strong&gt; — Mark classes that integrate with external providers (e.g., &lt;code&gt;Stripe&lt;/code&gt;, &lt;code&gt;PayPal&lt;/code&gt;, &lt;code&gt;SendGrid&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;[EventHandler]&lt;/code&gt;&lt;/strong&gt; — Mark classes that handle domain events (e.g., &lt;code&gt;OrderCreatedHandler&lt;/code&gt;, &lt;code&gt;PaymentReceivedHandler&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These join the existing attribute family: &lt;code&gt;[ApiEndpoint]&lt;/code&gt;, &lt;code&gt;[Service]&lt;/code&gt;, &lt;code&gt;[Repository]&lt;/code&gt;, and &lt;code&gt;[Entity]&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  New Discovery API Endpoints
&lt;/h3&gt;

&lt;p&gt;The admin API now exposes:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Endpoint&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;GET /{prefix}/api/discovery/annotated/business-flows&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Classes with &lt;code&gt;[BusinessFlow]&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;GET /{prefix}/api/discovery/annotated/integrations&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Classes with &lt;code&gt;[Integration]&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;GET /{prefix}/api/discovery/annotated/event-handlers&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Classes with &lt;code&gt;[EventHandler]&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;All seven annotation types are now discoverable via the API, and the admin dashboard's flow editor includes multi-select dropdowns for the new types.&lt;/p&gt;

&lt;h3&gt;
  
  
  Display Annotations on Enums
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;DocumentationType&lt;/code&gt; and &lt;code&gt;FlowBasedRole&lt;/code&gt; now carry &lt;code&gt;[Display(Name, Description)]&lt;/code&gt; attributes, making dropdown labels in the UI much more descriptive.&lt;/p&gt;

&lt;h3&gt;
  
  
  NuGet Packaging Fix
&lt;/h3&gt;

&lt;p&gt;Sub-project DLLs are now bundled correctly into the NuGet package without requiring consumers to add them as separate NuGet dependencies.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting Started
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Install
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dotnet add package FlowBased.NetCore
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Configure
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;FlowBased.NetCore.AspNetCore.DependencyInjection&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;builder&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;WebApplication&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;CreateBuilder&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Services&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;AddFlowBased&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;options&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;options&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Title&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"My App Docs"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="n"&gt;options&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RoutePrefix&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"flowdocs"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="n"&gt;options&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;StoragePath&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Path&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Combine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Environment&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;WebRootPath&lt;/span&gt; &lt;span class="p"&gt;??&lt;/span&gt; &lt;span class="s"&gt;"wwwroot"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"FlowBasedDocs"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;options&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;EnableVersioning&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="n"&gt;options&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AllowMarkdown&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;app&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Build&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="c1"&gt;// Seed demo data (optional)&lt;/span&gt;
&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;scope&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Services&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;CreateScope&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;service&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;scope&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ServiceProvider&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;GetRequiredService&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;IFlowService&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;();&lt;/span&gt;
    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;SeedData&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;SeedAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;service&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;UseFlowBased&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Run&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Annotate your code
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nf"&gt;BusinessFlow&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Order Processing"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Handles the complete order lifecycle"&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;
&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;OrderProcessingService&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;span class="p"&gt;[&lt;/span&gt;&lt;span class="nf"&gt;Integration&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Stripe"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Stripe"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Payment processing via Stripe"&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;
&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;StripePaymentGateway&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;span class="p"&gt;[&lt;/span&gt;&lt;span class="nf"&gt;EventHandler&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"OrderCreated"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"OrderCreated"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Sends notifications when an order is created"&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;
&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;OrderCreatedHandler&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;The dashboard will automatically surface these annotations in the flow editor.&lt;/p&gt;

&lt;h2&gt;
  
  
  Features at a Glance
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Zero-config embedded SPA&lt;/strong&gt; — No npm, no webpack, no separate deployment&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;JSON file storage&lt;/strong&gt; — No database required&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Full-text search&lt;/strong&gt; — Names, descriptions, tags, content&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automatic versioning&lt;/strong&gt; — Every edit is a snapshot&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;File attachments&lt;/strong&gt; — Drag-and-drop, paste, GUID storage&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Markdown + HTML&lt;/strong&gt; — Both content types, server-side Markdig rendering&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Code snippets&lt;/strong&gt; — Named, language-tagged examples&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Technical dependency mapping&lt;/strong&gt; — Link flows to APIs, services, repos, DB tables&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Auto-discovery&lt;/strong&gt; — Scans assemblies for controllers, services, repositories, entities, and now business flows, integrations, and event handlers&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lines-of-code estimation&lt;/strong&gt; — Categorized by type&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;RBAC&lt;/strong&gt; — 6-level role hierarchy with per-application permissions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Public documentation portal&lt;/strong&gt; — Read-only, separately themed, independently auth-controlled&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dark mode&lt;/strong&gt; — Independent toggles for admin and docs portal&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Custom branding&lt;/strong&gt; — Accent color, title, route prefix&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Broad compatibility&lt;/strong&gt; — Works with .NET 6 through .NET 10&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Package Details
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Package&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;FlowBased.NetCore&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Version&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;1.0.1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;License&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;MIT&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Author&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Muhammad Rehman Tahir&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Repository&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/MRehmanTahir/FlowBased.NetCore" rel="noopener noreferrer"&gt;github.com/MRehmanTahir/FlowBased.NetCore&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Target&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;net8.0+ (Shared library targets netstandard2.1)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;buildTransitive&lt;/code&gt; support for automatic &lt;code&gt;using&lt;/code&gt; directives&lt;/li&gt;
&lt;li&gt;Searchable annotation dropdowns in the flow editor (already in the dashboard UI)&lt;/li&gt;
&lt;li&gt;Further API refinements based on feedback&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Give it a try and let me know what you think! Feedback, issues, and PRs are welcome on GitHub.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Built by Muhammad Rehman Tahir&lt;/em&gt;&lt;/p&gt;

</description>
      <category>flowbased</category>
      <category>nuget</category>
      <category>rehmantahir</category>
      <category>documentation</category>
    </item>
    <item>
      <title>🚀 2-Minute Testing Technique That Finds 80–90% Bugs (Build a QA Mindset as a Developer)</title>
      <dc:creator>Muhammd Rehman Tahir</dc:creator>
      <pubDate>Sat, 06 Jun 2026 16:59:53 +0000</pubDate>
      <link>https://dev.to/muhammd_rehman_tahir/2-minute-testing-technique-that-finds-80-90-bugs-build-a-qa-mindset-as-a-developer-k6n</link>
      <guid>https://dev.to/muhammd_rehman_tahir/2-minute-testing-technique-that-finds-80-90-bugs-build-a-qa-mindset-as-a-developer-k6n</guid>
      <description>&lt;p&gt;&lt;strong&gt;In QA, there is a super fast and practical 2-minute testing approach that helps you quickly identify most critical bugs before deep testing even begins. I personally use this method, and it has completely changed the way I look at software quality.&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;I call it: CRUD + Boundary + Abuse + Performance Scan
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It focuses on quickly validating a feature from all key angles:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🔹 Happy Path (CRUD Check)&lt;/strong&gt;&lt;br&gt;
First, verify the basics:&lt;br&gt;
Does the feature Create, Read, Update, Delete work properly?&lt;br&gt;
Are search and filters functioning as expected?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🔹 Boundary Testing&lt;/strong&gt;&lt;br&gt;
Test extreme and invalid inputs:&lt;br&gt;
Empty values, max length, special characters, negative numbers, decimals, invalid formats.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🔹 Abuse Testing&lt;/strong&gt;&lt;br&gt;
Try to break the system:&lt;br&gt;
Double clicks, rapid actions, refresh, back button, multiple tabs, duplicate submissions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🔹 Quick Performance &amp;amp; UI Scan&lt;/strong&gt;&lt;br&gt;
Check load time, UI breakage, responsiveness, error messages, console errors, and bulk data handling.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Golden Rule:&lt;/strong&gt;&lt;br&gt;
Ask these 7 questions on every screen:&lt;br&gt;
✔ Does data save correctly?&lt;br&gt;
✔ Is invalid data blocked?&lt;br&gt;
✔ Can duplicates happen?&lt;br&gt;
✔ Can unauthorized access occur?&lt;br&gt;
✔ Does refresh/back break anything?&lt;br&gt;
✔ Is performance acceptable?&lt;br&gt;
✔ Is UI stable in all scenarios?&lt;/p&gt;

&lt;p&gt;&lt;code&gt;This simple 2-minute scan can reveal 80–90% of system issues early, just like senior QA engineers do using quick “smoke testing” techniques.&lt;/code&gt;&lt;/p&gt;

</description>
      <category>qa</category>
      <category>softwaretesting</category>
      <category>bugtesting</category>
      <category>manualtesting</category>
    </item>
    <item>
      <title>How I Fixed "A Possible Object Cycle Was Detected" in ASP.NET Core (And What I Learned About DTOs)</title>
      <dc:creator>Muhammd Rehman Tahir</dc:creator>
      <pubDate>Thu, 16 Apr 2026 04:44:13 +0000</pubDate>
      <link>https://dev.to/muhammd_rehman_tahir/how-i-fixed-a-possible-object-cycle-was-detected-in-aspnet-core-and-what-i-learned-about-dtos-1k4p</link>
      <guid>https://dev.to/muhammd_rehman_tahir/how-i-fixed-a-possible-object-cycle-was-detected-in-aspnet-core-and-what-i-learned-about-dtos-1k4p</guid>
      <description>&lt;p&gt;Yesterday I ran into a classic but dangerous issue while working on an ASP.NET Core API:&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;"A possible object cycle was detected"&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;At first, everything was working fine… until I introduced some additional logic on top of my existing response. Suddenly, my API started failing during JSON serialization.&lt;/p&gt;

&lt;p&gt;After digging deeper, I realized the root cause:&lt;/p&gt;

&lt;p&gt;❌ I was directly returning EF Core entities&lt;br&gt;
❌ Navigation properties created a circular reference&lt;br&gt;
❌ The serializer went into an infinite loop&lt;/p&gt;

&lt;p&gt;The structure looked something like this:&lt;br&gt;
Entity → Navigation → Entity → Navigation → 🔁&lt;/p&gt;

&lt;p&gt;💥 Boom — Object Cycle Error!&lt;/p&gt;




&lt;h3&gt;
  
  
  🔍 How I resolved it:
&lt;/h3&gt;

&lt;p&gt;Instead of sending the full entity graph to the frontend, I:&lt;/p&gt;

&lt;p&gt;✔ Trimmed the entity to only required properties&lt;br&gt;
✔ Broke the circular reference manually&lt;br&gt;
✔ Understood the importance of separating API models from DB models&lt;/p&gt;




&lt;h3&gt;
  
  
  🚀 Key Learning:
&lt;/h3&gt;

&lt;p&gt;This issue made one thing very clear:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;DTOs are not optional — they are essential.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Using DTOs helps you:&lt;br&gt;
✔ Avoid circular reference issues&lt;br&gt;
✔ Keep your API responses clean and controlled&lt;br&gt;
✔ Improve performance&lt;br&gt;
✔ Maintain proper architecture&lt;/p&gt;




&lt;h3&gt;
  
  
  ⚠️ Developer Tip:
&lt;/h3&gt;

&lt;p&gt;If you're exposing EF entities directly in APIs, you're just one change away from breaking your system.&lt;/p&gt;

&lt;p&gt;Think long-term. Avoid quick fixes.&lt;/p&gt;




&lt;p&gt;💬 Have you ever faced this issue in your APIs?&lt;/p&gt;

</description>
      <category>dotnet</category>
      <category>webapi</category>
      <category>softwareengineering</category>
      <category>backend</category>
    </item>
    <item>
      <title>I just published my second NuGet package: Rehman.CurrencyTextify.Core</title>
      <dc:creator>Muhammd Rehman Tahir</dc:creator>
      <pubDate>Wed, 11 Mar 2026 17:06:22 +0000</pubDate>
      <link>https://dev.to/muhammd_rehman_tahir/i-just-published-my-second-nuget-package-rehmancurrencytextifycore-5647</link>
      <guid>https://dev.to/muhammd_rehman_tahir/i-just-published-my-second-nuget-package-rehmancurrencytextifycore-5647</guid>
      <description>&lt;p&gt;&lt;strong&gt;This lightweight and flexible package converts money amounts into text for 8 currencies: Dollar, Euro, Pound, Yen, Rupee, Rial, Dirham, and Dinar — now including PKR!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;✨ Key Features:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Batch processing&lt;/li&gt;
&lt;li&gt;Fuzzy spelling correction&lt;/li&gt;
&lt;li&gt;Custom rounding modes&lt;/li&gt;
&lt;li&gt;Capitalization styles&lt;/li&gt;
&lt;li&gt;Subunit name overrides&lt;/li&gt;
&lt;li&gt;Handling negative amounts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Whether you’re building financial apps, invoices, or reports, this package makes working with currencies in code fast, simple, and reliable.&lt;/p&gt;

&lt;p&gt;💡 I’d love for you to try it out and share your feedback!&lt;/p&gt;

&lt;p&gt;🔗 Check it out on NuGet : &lt;a href="https://www.nuget.org/packages/Rehman.CurrencyTextify.Core/" rel="noopener noreferrer"&gt;https://www.nuget.org/packages/Rehman.CurrencyTextify.Core/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>nuget</category>
      <category>dotnet</category>
      <category>csharp</category>
    </item>
  </channel>
</rss>
