{"id":29354,"date":"2026-09-15T11:54:42","date_gmt":"2026-09-15T11:54:42","guid":{"rendered":"https:\/\/umang.pk\/2026\/09\/15\/%d9%85%d8%ad%d9%81%d9%88%d8%b8%d8%8c-%d8%a8%d8%aa%d8%af%d8%b1%db%8c%d8%ac-%d8%b1%db%8c%d9%84%db%8c%d8%b2-%da%a9%db%92-%d9%84%db%8c%db%92-%d9%81%db%8c%da%86%d8%b1-%d9%81%d9%84%db%8c%da%af%d8%b2-%da%a9\/"},"modified":"2026-09-15T11:54:42","modified_gmt":"2026-09-15T11:54:42","slug":"%d9%85%d8%ad%d9%81%d9%88%d8%b8%d8%8c-%d8%a8%d8%aa%d8%af%d8%b1%db%8c%d8%ac-%d8%b1%db%8c%d9%84%db%8c%d8%b2-%da%a9%db%92-%d9%84%db%8c%db%92-%d9%81%db%8c%da%86%d8%b1-%d9%81%d9%84%db%8c%da%af%d8%b2-%da%a9","status":"publish","type":"post","link":"https:\/\/umang.pk\/ur\/2026\/09\/15\/%d9%85%d8%ad%d9%81%d9%88%d8%b8%d8%8c-%d8%a8%d8%aa%d8%af%d8%b1%db%8c%d8%ac-%d8%b1%db%8c%d9%84%db%8c%d8%b2-%da%a9%db%92-%d9%84%db%8c%db%92-%d9%81%db%8c%da%86%d8%b1-%d9%81%d9%84%db%8c%da%af%d8%b2-%da%a9\/","title":{"rendered":"\u0645\u062d\u0641\u0648\u0638\u060c \u0628\u062a\u062f\u0631\u06cc\u062c \u0631\u06cc\u0644\u06cc\u0632 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0641\u06cc\u0686\u0631 \u0641\u0644\u06cc\u06af\u0632 \u06a9\u0648 \u06a9\u06cc\u0633\u06d2 \u0646\u0627\u0641\u0630 \u06a9\u06cc\u0627 \u062c\u0627\u0626\u06d2\u06d4"},"content":{"rendered":"\n<div id=\"\">\n<p>\u0641\u06cc\u0686\u0631 \u062c\u06be\u0646\u0688\u06d2 \u0622\u067e \u06a9\u06cc \u0679\u06cc\u0645 \u06a9\u06d2 \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u06c1\u062a\u06be\u06cc\u0627\u0631\u0648\u06ba \u0645\u06cc\u06ba \u0633\u0628 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u0637\u0627\u0642\u062a\u0648\u0631 \u0679\u0648\u0644\u0632 \u0645\u06cc\u06ba \u0633\u06d2 \u0627\u06cc\u06a9 \u06c1\u06cc\u06ba\u06d4 \u0648\u06c1 \u0627\u0644\u06af <em>\u062a\u0639\u06cc\u0646\u0627\u062a\u06cc<\/em> \u0633\u06d2 <em>\u0631\u06c1\u0627\u0626\u06cc<\/em>\u0627\u0633 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u0622\u067e \u06a9\u06cc CI\/CD \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u06c1\u0631 \u0627\u0646\u0636\u0645\u0627\u0645 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u06a9\u0648\u0688 \u06a9\u0648 \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u0633\u0631\u0648\u0631\u0632 \u067e\u0631 \u062f\u06be\u06a9\u06cc\u0644 \u0633\u06a9\u062a\u06cc \u06c1\u06d2\u060c \u0644\u06cc\u06a9\u0646 \u0622\u067e \u06a9\u06d2 \u0635\u0627\u0631\u0641\u06cc\u0646 \u06a9\u0648 \u0646\u06cc\u0627 \u0631\u0648\u06cc\u06c1 \u062a\u0628\u06be\u06cc \u0646\u0638\u0631 \u0622\u0626\u06d2 \u06af\u0627 \u062c\u0628 \u0622\u067e \u0648\u0627\u0636\u062d \u0637\u0648\u0631 \u067e\u0631 \u0633\u0648\u0626\u0686 \u06a9\u0648 \u067e\u0644\u0679\u0627\u0626\u06cc\u06ba \u06af\u06d2\u06d4<\/p>\n<p>\u0627\u06cc\u06a9 \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u0627\u06cc\u06a9 \u062a\u06a9\u0646\u06cc\u06a9\u06cc \u0648\u0627\u0642\u0639\u06c1 \u06c1\u06d2\u060c \u062c\u0628\u06a9\u06c1 \u0631\u06c1\u0627\u0626\u06cc \u0627\u06cc\u06a9 \u067e\u0631\u0648\u0688\u06a9\u0679 \u06a9\u0627 \u0641\u06cc\u0635\u0644\u06c1 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0639\u0644\u06cc\u062d\u062f\u06af\u06cc \u0627\u0633 \u062f\u0633\u062a\u0627\u0648\u06cc\u0632 \u0645\u06cc\u06ba \u0628\u0627\u0642\u06cc \u0633\u0628 \u06a9\u0686\u06be \u0645\u0645\u06a9\u0646 \u0628\u0646\u0627\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>\u062a\u0627\u06c1\u0645\u060c \u0646\u0627\u0642\u0635 \u0637\u0648\u0631 \u067e\u0631 \u0646\u0627\u0641\u0630 \u06a9\u0631\u062f\u06c1 \u062c\u06be\u0646\u0688\u06d2 \u062a\u06a9\u0646\u06cc\u06a9\u06cc \u0642\u0631\u0636\u060c \u0688\u0631\u0627\u0624\u0646\u06d2 \u062e\u0648\u0627\u0628\u0648\u06ba \u06a9\u06cc \u062c\u0627\u0646\u0686 \u0627\u0648\u0631 \u0631\u0646 \u0679\u0627\u0626\u0645 \u067e\u06cc\u0686\u06cc\u062f\u06af\u06cc \u06a9\u0627 \u0633\u0628\u0628 \u0628\u0646\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0627\u0633 \u0622\u0631\u0679\u06cc\u06a9\u0644 \u0645\u06cc\u06ba\u060c \u0622\u067e \u0641\u06cc\u0686\u0631 \u0641\u0644\u06cc\u06af \u06a9\u0648 \u0644\u0627\u06af\u0648 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u0644\u06cc\u062f\u06cc \u0646\u0645\u0648\u0646\u06d2 \u0633\u06cc\u06a9\u06be\u06cc\u06ba \u06af\u06d2\u060c \u0633\u0627\u062f\u06c1 \u0628\u0648\u0644\u06cc\u0646 \u0679\u0648\u06af\u0644\u0632 \u0633\u06d2 \u0644\u06d2 \u06a9\u0631 \u0641\u06cc\u0635\u062f \u067e\u0631 \u0645\u0628\u0646\u06cc \u0631\u0648\u0644 \u0622\u0624\u0679\u0633 \u0627\u0648\u0631 \u06cc\u0648\u0632\u0631 \u0633\u06cc\u06af\u0645\u0646\u0679\u06cc\u0634\u0646 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0633\u0627\u062a\u06be \u0644\u0627\u0626\u0641 \u0633\u0627\u0626\u06cc\u06a9\u0644 \u0645\u06cc\u0646\u062c\u0645\u0646\u0679 \u0627\u0648\u0631 \u0627\u0633 \u0633\u06d2 \u0628\u0686\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u0646\u0679\u06cc \u067e\u06cc\u0679\u0631\u0646\u0632\u06d4 \u0635\u062d\u06cc\u062d \u0637\u0631\u06cc\u0642\u06c1 \u06cc\u06c1 \u06c1\u06d2:<\/p>\n<h2 id=\"heading-table-of-contents\">\u0627\u0646\u0688\u06cc\u06a9\u0633<\/h2>\n<h2 id=\"heading-why-feature-flags\">\u06c1\u0645\u06cc\u06ba \u0641\u06cc\u0686\u0631 \u062c\u06be\u0646\u0688\u0648\u06ba \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06a9\u06cc\u0648\u06ba \u06c1\u06d2\u061f<\/h2>\n<p>\u0628\u0646\u06cc\u0627\u062f\u06cc \u0642\u062f\u0631 \u06a9\u06cc \u062a\u062c\u0648\u06cc\u0632 \u0633\u0627\u062f\u06c1 \u06c1\u06d2\u06d4 \u062c\u0628 \u0686\u0627\u06c1\u06cc\u06ba \u062a\u0639\u06cc\u0646\u0627\u062a \u06a9\u0631\u06cc\u06ba\u060c \u0627\u0648\u0631 \u062a\u06cc\u0627\u0631 \u06c1\u0648\u0646\u06d2 \u067e\u0631 \u0686\u06be\u0648\u0691 \u062f\u06cc\u06ba\u06d4<\/p>\n<ul>\n<li>\n<p><strong>\u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u06a9\u06d2 \u062e\u0637\u0631\u06d2 \u06a9\u0648 \u06a9\u0645 \u06a9\u0631\u06cc\u06ba:<\/strong> \u0627\u067e\u0646\u06d2 \u06a9\u0648\u0688 \u06a9\u0648 \u062c\u06be\u0646\u0688\u06d2 \u06a9\u06d2 \u067e\u06cc\u0686\u06be\u06d2 \u0628\u06be\u06cc\u062c\u06cc\u06ba\u060c X% \u0635\u0627\u0631\u0641\u06cc\u0646 \u06a9\u0648 \u0686\u0627\u0644\u0648 \u06a9\u0631\u06cc\u06ba\u060c \u0627\u0633 \u06a9\u06cc \u0646\u06af\u0631\u0627\u0646\u06cc \u06a9\u0631\u06cc\u06ba\u060c \u0627\u0648\u0631 \u0627\u0633 \u06a9\u06cc \u067e\u06cc\u0645\u0627\u0626\u0634 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u0679\u0631\u0646\u06a9 \u067e\u0631 \u0645\u0628\u0646\u06cc \u062a\u0631\u0642\u06cc \u06a9\u0648 \u0641\u0639\u0627\u0644 \u06a9\u0631\u06cc\u06ba:<\/strong> \u0627\u0688\u06d2 \u0633\u06d2 \u0628\u06c1\u062a\u06cc \u06c1\u0648\u0626\u06cc \u06a9\u0648\u0626\u06cc \u0637\u0648\u06cc\u0644 \u0645\u062f\u062a\u06cc \u062e\u0635\u0648\u0635\u06cc\u062a \u06a9\u06cc \u0634\u0627\u062e\u06cc\u06ba \u0646\u06c1\u06cc\u06ba \u06c1\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u062a\u0627\u0626\u06cc\u062f \u0634\u062f\u06c1 \u062a\u062c\u0631\u0628\u0627\u062a:<\/strong> \u0627\u0631\u062a\u06a9\u0627\u0628 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u062d\u0642\u06cc\u0642\u06cc \u0635\u0627\u0631\u0641\u06cc\u0646 \u06a9\u06d2 \u0633\u0627\u062a\u06be A\/B \u0679\u06cc\u0633\u0679\u0646\u06af \u0641\u0646\u06a9\u0634\u0646<\/p>\n<\/li>\n<li>\n<p><strong>\u06a9\u0650\u0644 \u0633\u0648\u0626\u0686 \u0622\u0641\u0631\u0632:<\/strong> \u0627\u06af\u0631 \u067e\u06cc\u062f\u0627\u0648\u0627\u0631 \u0645\u06cc\u06ba \u06a9\u0648\u0626\u06cc \u0645\u0633\u0626\u0644\u06c1 \u067e\u06cc\u062f\u0627 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u060c \u062a\u0648 \u06c1\u0645 \u0641\u06cc\u0686\u0631 \u06a9\u0648 \u0641\u0648\u0631\u06cc \u0637\u0648\u0631 \u067e\u0631 \u063a\u06cc\u0631 \u0641\u0639\u0627\u0644 \u06a9\u0631 \u062f\u06cc\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<\/ul>\n<h2 id=\"heading-types-of-feature-flags\">\u0646\u0645\u0627\u06cc\u0627\u06ba \u067e\u0631\u0686\u0645 \u06a9\u06cc \u0642\u0633\u0645<\/h2>\n<p>\u062a\u0645\u0627\u0645 \u062c\u06be\u0646\u0688\u06d2 \u0627\u06cc\u06a9 \u06c1\u06cc \u0645\u0642\u0635\u062f \u06a9\u06cc \u062a\u06a9\u0645\u06cc\u0644 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u062a\u06d2\u06d4 \u0627\u0642\u0633\u0627\u0645 \u06a9\u0648 \u0633\u0645\u062c\u06be\u0646\u06d2 \u0633\u06d2 \u0622\u067e \u06a9\u0648 \u0627\u0646 \u06a9\u06d2 \u0644\u0627\u0626\u0641 \u0633\u0627\u0626\u06cc\u06a9\u0644 \u06a9\u0648 \u0645\u0646\u0638\u0645 \u06a9\u0631\u0646\u06d2 \u0645\u06cc\u06ba \u0645\u062f\u062f \u0645\u0644\u06d2 \u06af\u06cc\u06d4<\/p>\n<table>\n<thead>\n<tr>\n<th>\u0632\u0645\u0631\u06c1<\/th>\n<th>\u0645\u0642\u0635\u062f<\/th>\n<th>\u0632\u0646\u062f\u06af\u06cc<\/th>\n<th>\u06c1\u0627\u06ba<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><strong>\u0631\u06c1\u0627\u0626\u06cc<\/strong><\/td>\n<td>\u06af\u06cc\u0679 \u06a9\u0627 \u0646\u0627\u0645\u06a9\u0645\u0644 \u0641\u0646\u06a9\u0634\u0646<\/td>\n<td>\u0686\u0646\u062f \u062f\u0646\u0648\u06ba \u0633\u06d2 \u0686\u0646\u062f \u06c1\u0641\u062a\u0648\u06ba \u062a\u06a9<\/td>\n<td>\u0646\u0626\u06cc \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u06a9\u0627 \u0628\u06c1\u0627\u0624<\/td>\n<\/tr>\n<tr>\n<td><strong>\u062a\u062c\u0631\u0628\u06c1<\/strong><\/td>\n<td>A\/B \u0679\u06cc\u0633\u0679\u0646\u06af \u06a9\u06cc \u0645\u062e\u062a\u0644\u0641 \u062d\u0627\u0644\u062a\u06cc\u06ba\u06d4<\/td>\n<td>\u0686\u0646\u062f \u06c1\u0641\u062a\u0648\u06ba \u0633\u06d2 \u0686\u0646\u062f \u0645\u06c1\u06cc\u0646\u0648\u06ba \u062a\u06a9<\/td>\n<td>\u0642\u06cc\u0645\u062a\u0648\u06ba \u06a9\u0627 \u062a\u0639\u06cc\u0646 \u0635\u0641\u062d\u06c1 \u0644\u06d2 \u0622\u0624\u0679<\/td>\n<\/tr>\n<tr>\n<td><strong>\u06a9\u0627\u0645<\/strong><\/td>\n<td>\u0622\u067e\u0631\u06cc\u0634\u0646\u0644 \u0633\u0644\u0648\u06a9 \u06a9\u0646\u0679\u0631\u0648\u0644<\/td>\n<td>\u0645\u0633\u062a\u0642\u0644<\/td>\n<td>\u0634\u0631\u062d \u06a9\u06cc \u062d\u062f \u0679\u0648\u06af\u0644<\/td>\n<\/tr>\n<tr>\n<td><strong>\u0627\u062c\u0627\u0632\u062a<\/strong><\/td>\n<td>\u0627\u062c\u0627\u0632\u062a \u067e\u0631 \u0645\u0628\u0646\u06cc \u0631\u0633\u0627\u0626\u06cc<\/td>\n<td>\u0645\u0633\u062a\u0642\u0644<\/td>\n<td>\u067e\u0631\u06cc\u0645\u06cc\u0645 \u0679\u0627\u0626\u0631 \u06a9\u06cc \u062e\u0635\u0648\u0635\u06cc\u0627\u062a<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u0631\u06cc\u0644\u06cc\u0632 \u06a9\u06d2 \u062c\u06be\u0646\u0688\u06d2 \u0645\u062e\u062a\u0635\u0631 \u0645\u062f\u062a \u06a9\u06d2 \u0644\u06cc\u06d2 \u06c1\u0648\u0646\u06d2 \u0686\u0627\u06c1\u0626\u06cc\u06ba\u06d4 \u0627\u06af\u0631 \u06c1\u0631 \u06a9\u0648\u0626\u06cc \u062a\u06cc\u0646 \u0645\u06c1\u06cc\u0646\u0648\u06ba \u0633\u06d2 \u062c\u06be\u0646\u0688\u0627 \u062a\u06be\u0627\u0645\u06d2 \u06c1\u0648\u0626\u06d2 \u06c1\u06d2 \u062a\u0648 \u06cc\u06c1 \u062c\u06be\u0646\u0688\u0627 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0688\u06cc\u0688 \u06a9\u0648\u0688 \u06c1\u06d2 \u062c\u0648 \u06a9\u0633\u06cc \u06a9\u0648 \u0627\u0644\u062c\u06be\u0627\u0646\u06d2 \u06a9\u0627 \u0627\u0646\u062a\u0638\u0627\u0631 \u06a9\u0631 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4<\/p>\n<h2 id=\"heading-pattern-1-simple-boolean-toggle\">\u067e\u06cc\u0679\u0631\u0646 1: \u0633\u0627\u062f\u06c1 \u0628\u0648\u0644\u06cc\u0646 \u0679\u0648\u06af\u0644<\/h2>\n<p>\u06cc\u06c1 \u0633\u0628 \u0633\u06d2 \u0628\u0646\u06cc\u0627\u062f\u06cc \u0646\u0645\u0648\u0646\u06c1 \u06c1\u06d2\u06d4 \u0627\u0646\u062f\u0631\u0648\u0646\u06cc \u062e\u0635\u0648\u0635\u06cc\u0627\u062a \u06cc\u0627 \u06a9\u0650\u0644 \u0633\u0648\u0626\u0686\u0632 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0628\u06c1\u062a \u0627\u0686\u06be\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-typescript\">interface FeatureFlags {\n  newDashboard: boolean;\n  experimentalSearch: boolean;\n  maintenanceMode: boolean;\n}\n\nfunction getFlags(userId: string): FeatureFlags {\n  \/\/ Fetch from your flag provider (LaunchDarkly, Unleash, or similar)\n  return flagProvider.evaluate(userId);\n}\n\n\/\/ Usage\nif (flags.newDashboard) {\n  return <newdashboard\/>;\n}\nreturn <legacydashboard\/>;\n<\/code><\/pre>\n<p>\u0627\u0648\u067e\u0631 \u06a9\u06d2 \u06a9\u0648\u0688 \u0645\u06cc\u06ba <code>getFlags<\/code> \u0641\u0646\u06a9\u0634\u0646 \u06c1\u06d2 <code>userId<\/code> \u062c\u06be\u0646\u0688\u0627 \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u0633\u06d2 \u0627\u0633 \u0635\u0627\u0631\u0641 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062a\u0645\u0627\u0645 \u062c\u06be\u0646\u0688\u0648\u06ba \u06a9\u0627 \u062c\u0627\u0626\u0632\u06c1 \u0644\u06cc\u0646\u06d2 \u06a9\u0648 \u06a9\u06c1\u06cc\u06ba\u06d4 \u0646\u062a\u06cc\u062c\u06c1 \u0627\u06cc\u06a9 \u0633\u0627\u062f\u06c1 \u0622\u0628\u062c\u06cc\u06a9\u0679 \u06c1\u06d2 \u062c\u06c1\u0627\u06ba \u06c1\u0631 \u06a9\u0644\u06cc\u062f \u067e\u0631\u0686\u0645 \u06a9\u0627 \u0646\u0627\u0645 \u06c1\u06d2 \u0627\u0648\u0631 \u06c1\u0631 \u0642\u062f\u0631 \u06cc\u06c1 \u06c1\u06d2: <code>true<\/code> \u06cc\u0627 <code>false<\/code>.<\/p>\n<p>\u06a9\u0627\u0644 \u0633\u0627\u0626\u0679 \u06cc\u06c1 \u0641\u06cc\u0635\u0644\u06c1 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u062c\u06be\u0646\u0688\u06d2 \u06a9\u06cc \u062c\u0627\u0646\u0686 \u06a9\u0631\u062a\u06cc \u06c1\u06d2 \u06a9\u06c1 \u06a9\u0648\u0646 \u0633\u0627 \u062c\u0632\u0648 \u067e\u06cc\u0634 \u06a9\u0631\u0646\u0627 \u06c1\u06d2\u06d4 \u0627\u06af\u0631 <code>newDashboard<\/code> \u06c1\u06d2 <code>true<\/code>\u0635\u0627\u0631\u0641\u06cc\u0646 \u0627\u06cc\u06a9 \u0646\u06cc\u0627 \u062a\u062c\u0631\u0628\u06c1 \u062f\u06cc\u06a9\u06be\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u067e\u06be\u0631 <code>false<\/code> \u06cc\u0627\u060c \u0627\u06af\u0631 \u0631\u0633\u0627\u0626\u06cc \u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u0646\u06c1\u06cc\u06ba \u062f\u06cc \u06af\u0626\u06cc \u06c1\u06d2 \u062a\u0648 \u0645\u06cc\u0631\u0627\u062b \u062a\u06a9 \u0631\u0633\u0627\u0626\u06cc \u062f\u06cc \u062c\u0627\u0626\u06d2 \u06af\u06cc\u06d4<\/p>\n<p>\u067e\u0631\u0686\u0645 \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u0627 \u062a\u0645\u0627\u0645 \u0627\u06c1\u062f\u0627\u0641\u06cc \u0645\u0646\u0637\u0642 \u06a9\u0648 \u0633\u0646\u0628\u06be\u0627\u0644\u062a\u0627 \u06c1\u06d2\u06d4 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u0627 \u06a9\u0648\u0688 \u0627\u0633 \u06a9\u06d2 \u0645\u0637\u0627\u0628\u0642 \u0646\u062a\u0627\u0626\u062c \u0627\u0648\u0631 \u0634\u0627\u062e\u0648\u06ba \u06a9\u0648 \u067e\u0691\u06be\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u0633 \u067e\u06cc\u0679\u0631\u0646 \u06a9\u0648 \u0627\u0646\u062f\u0631\u0648\u0646\u06cc \u0679\u0648\u0644\u0632\u060c \u06a9\u0650\u0644 \u0633\u0648\u0626\u0686\u0632\u060c \u0627\u0648\u0631 \u062a\u0645\u0627\u0645 \u06cc\u0627 \u06a9\u0686\u06be \u0628\u06be\u06cc \u0646\u06c1\u06cc\u06ba \u062e\u0635\u0648\u0635\u06cc\u0627\u062a \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p>\u062a\u0627\u06c1\u0645\u060c \u06cc\u06c1 \u0628\u0627\u062a \u0630\u06c1\u0646 \u0645\u06cc\u06ba \u0631\u06a9\u06be\u06cc\u06ba \u06a9\u06c1 \u0628\u0648\u0644\u06cc\u0646 \u062c\u06be\u0646\u0688\u06d2 \u0628\u062a\u062f\u0631\u06cc\u062c \u0631\u0648\u0644 \u0622\u0624\u0679 \u06a9\u0646\u0679\u0631\u0648\u0644 \u0641\u0631\u0627\u06c1\u0645 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0622\u067e \u06cc\u0627 \u062a\u0648 \u0622\u0646 \u06cc\u0627 \u0622\u0641 \u06c1\u06cc\u06ba\u06d4 \u0627\u0633 \u0644\u06cc\u06d2 \u0627\u0633\u06d2 \u0627\u062d\u062a\u06cc\u0627\u0637 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<h2 id=\"heading-pattern-2-percentage-based-rollout\">\u067e\u06cc\u0679\u0631\u0646 2: \u0641\u06cc\u0635\u062f \u067e\u0631 \u0645\u0628\u0646\u06cc \u0631\u0648\u0644 \u0622\u0624\u0679<\/h2>\n<p>\u0627\u0633 \u067e\u06cc\u0679\u0631\u0646 \u06a9\u0648 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u0648\u06ba \u06a9\u06d2 \u0627\u06cc\u06a9 \u0645\u062e\u0635\u0648\u0635 \u0641\u06cc\u0635\u062f \u062a\u06a9 \u067e\u06c1\u0646\u0686\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u060c \u062c\u06cc\u0633\u06d2 \u062c\u06cc\u0633\u06d2 \u0627\u0639\u062a\u0645\u0627\u062f \u0645\u06cc\u06ba \u0627\u0636\u0627\u0641\u06c1 \u06c1\u0648\u062a\u0627 \u06c1\u06d2 \u0631\u0641\u062a\u06c1 \u0631\u0641\u062a\u06c1 \u0628\u0691\u06be\u062a\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-typescript\">interface RolloutConfig {\n  percentage: number; \/\/ 0-100\n  sticky: boolean;    \/\/ Same user always gets same result\n}\n\nfunction isEnabled(\n  flagName: string,\n  userId: string,\n  config: RolloutConfig\n): boolean {\n  if (!config.sticky) {\n    return Math.random() * 100 < config.percentage;\n  }\n\n  \/\/ Deterministic hash ensures consistency per user\n  const hash = deterministicHash(`${flagName}:${userId}`);\n  return (hash % 100) < config.percentage;\n}\n\nfunction deterministicHash(input: string): number {\n  let hash = 0;\n  for (const char of input) {\n    hash = ((hash << 5) - hash + char.charCodeAt(0)) | 0;\n  }\n  return Math.abs(hash);\n}\n<\/code><\/pre>\n<p>\u0627\u0648\u067e\u0631 \u0648\u0627\u0644\u06d2 \u06a9\u0648\u0688 \u0645\u06cc\u06ba\u060c <code>isEnabled<\/code> \u067e\u0631\u0686\u0645 \u06a9\u0627 \u0646\u0627\u0645\u060c \u0635\u0627\u0631\u0641 ID\u060c \u0627\u0648\u0631 \u0631\u06cc\u0644\u06cc\u0632 \u06a9\u0646\u0641\u06cc\u06af\u0631\u06cc\u0634\u0646 \u0644\u06cc\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0628\u0648\u0644\u06cc\u0646 \u0644\u0648\u0679\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u062c\u0628 <code>sticky<\/code> \u06c1\u06d2 <code>false<\/code>\u06cc\u06c1 \u06a9\u0627\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 <code>Math.random()<\/code>\u0627\u0633 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2 \u06a9\u06c1 \u0627\u06cc\u06a9 \u06c1\u06cc \u0635\u0627\u0631\u0641 \u06a9\u0648 \u06c1\u0631 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0633\u06d2 \u0645\u062e\u062a\u0644\u0641 \u0646\u062a\u0627\u0626\u062c \u0645\u0644 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u06cc\u06c1 \u0648\u06c1 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2 \u062c\u0648 \u0622\u067e \u0645\u0633\u0644\u0633\u0644 \u0635\u0627\u0631\u0641 \u06a9\u06d2 \u062a\u062c\u0631\u0628\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0686\u0627\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u062c\u0628 <code>sticky<\/code> \u06c1\u06d2 <code>true<\/code>\u06cc\u06c1 \u0686\u0644\u062a\u0627 \u06c1\u06d2\u06d4 <code>deterministicHash<\/code> \u0627\u0633 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2.<\/p>\n<p><code>deterministicHash<\/code>    \u0645\u0639\u06cc\u0627\u0631\u06cc \u0628\u0679 \u0648\u0627\u0626\u0632 \u06c1\u06cc\u0634 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u0627\u0633\u0679\u0631\u0646\u06af \u06a9\u0648 \u0646\u0645\u0628\u0631 \u0645\u06cc\u06ba \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u06c1\u0645 \u062a\u0641\u0635\u06cc\u0644 \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u0627\u0646 \u067e\u0679 \u067e\u0631\u0686\u0645 \u06a9\u06d2 \u0646\u0627\u0645\u0648\u06ba \u06a9\u0648 \u062c\u0648\u0691\u062a\u0627 \u06c1\u06d2\u06d4 <em>\u0627\u0648\u0631<\/em> \u0635\u0627\u0631\u0641 \u06a9\u06cc \u0634\u0646\u0627\u062e\u062a: <code>\"new-checkout:user-123\"<\/code>. \u062f\u0648\u0646\u0648\u06ba \u06a9\u0648 \u0627\u06cc\u06a9 \u0633\u0627\u062a\u06be \u06c1\u06cc\u0634 \u06a9\u0631\u0646\u06d2 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u0635\u0627\u0631\u0641 123 \u06a9\u06cc \u0628\u0627\u0644\u0679\u06cc \u0627\u0633\u0627\u0626\u0646\u0645\u0646\u0679 \u0641\u06cc \u067e\u0631\u0686\u0645 \u0622\u0632\u0627\u062f \u06c1\u06d2\u06d4 \u06cc\u0639\u0646\u06cc\u060c \u0622\u067e \u0627\u06cc\u06a9 \u062a\u062c\u0631\u0628\u06d2 \u0645\u06cc\u06ba 10% \u0645\u06cc\u06ba \u06c1\u0648 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u062f\u0648\u0633\u0631\u06d2 \u062a\u062c\u0631\u0628\u06d2 \u0645\u06cc\u06ba 10% \u0645\u06cc\u06ba \u0646\u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u0627\u0633 \u06a9\u06d2 \u0628\u0639\u062f \u06c1\u0645 0 \u0627\u0648\u0631 99 \u06a9\u06d2 \u062f\u0631\u0645\u06cc\u0627\u0646 \u0646\u0645\u0628\u0631 \u0628\u0646\u0627\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06c1\u06cc\u0634 \u0631\u0632\u0644\u0679 \u0645\u0627\u0688\u06cc\u0648\u0644\u0648 100 \u0644\u06cc\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0627\u06af\u0631 \u0648\u06c1 \u0646\u0645\u0628\u0631 \u0631\u0648\u0644 \u0622\u0624\u0679 \u0631\u06cc\u0679 \u0633\u06d2 \u0646\u06cc\u0686\u06d2 \u0622\u062a\u0627 \u06c1\u06d2\u060c \u062a\u0648 \u0627\u0633 \u0635\u0627\u0631\u0641 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u06a9 \u062c\u06be\u0646\u0688\u0627 \u0633\u06cc\u0679 \u06a9\u06cc\u0627 \u062c\u0627\u0626\u06d2 \u06af\u0627\u06d4 \u0627\u06cc\u06a9 \u06c1\u06cc \u0633\u0679\u0631\u0646\u06af \u06a9\u0627 \u0627\u06cc\u06a9 \u06c1\u06cc\u0634 \u06c1\u0645\u06cc\u0634\u06c1 \u0627\u06cc\u06a9 \u06c1\u06cc \u0646\u0645\u0628\u0631 \u067e\u06cc\u062f\u0627 \u06a9\u0631\u06d2 \u06af\u0627\u060c \u0644\u06c1\u0630\u0627 \u0648\u06c1\u06cc \u0635\u0627\u0631\u0641 \u06c1\u0645\u06cc\u0634\u06c1 \u062f\u06c1\u0644\u06cc\u0632 \u06a9\u06d2 \u0627\u06cc\u06a9 \u06c1\u06cc \u0637\u0631\u0641 \u0627\u062a\u0631\u06d2 \u06af\u0627\u06d4<\/p>\n<p>\u0641\u06a9\u0633\u0688 \u06c1\u06cc\u0634\u0646\u06af \u0627\u06c1\u0645 \u06c1\u06d2\u06d4 \u0627\u0633 \u062e\u0635\u0648\u0635\u06cc\u062a \u06a9\u06d2 \u0628\u063a\u06cc\u0631\u060c 10% \u0631\u06cc\u0644\u06cc\u0632 \u0648\u0627\u0644\u06d2 \u0635\u0627\u0631\u0641\u06cc\u0646 \u06a9\u0648 \u0635\u0631\u0641 \u0627\u06cc\u06a9 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0645\u06cc\u06ba \u062e\u0635\u0648\u0635\u06cc\u062a \u0646\u0638\u0631 \u0622\u0626\u06d2 \u06af\u06cc\u060c \u0644\u06cc\u06a9\u0646 \u0627\u06af\u0644\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0645\u06cc\u06ba \u0646\u06c1\u06cc\u06ba\u06d4 \u0688\u0679\u0631\u0645\u06cc\u0646\u0633\u0679\u06a9 \u06c1\u06cc\u0634 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 <code>flagName + userId<\/code> \u0644\u06c1\u0630\u0627\u060c \u0627\u06cc\u06a9 \u06c1\u06cc \u0635\u0627\u0631\u0641 \u06c1\u0645\u06cc\u0634\u06c1 \u062f\u06c1\u0644\u06cc\u0632 \u06a9\u06d2 \u0627\u06cc\u06a9 \u06c1\u06cc \u0637\u0631\u0641 \u067e\u06c1\u0646\u0686 \u062c\u0627\u0626\u06d2 \u06af\u0627\u06d4<\/p>\n<h4 id=\"heading-recommended-ramp-schedule\">\u062a\u062c\u0648\u06cc\u0632 \u06a9\u0631\u062f\u06c1 \u0644\u06cc\u0645\u067e \u0634\u06cc\u0688\u0648\u0644:<\/h4>\n<p>\u0622\u06af\u06d2 \u0628\u0691\u06be\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u06c1\u0631 \u0642\u062f\u0645 \u0645\u06cc\u06ba \u06a9\u0645 \u0627\u0632 \u06a9\u0645 24 \u06af\u06be\u0646\u0679\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0645\u0633\u062a\u062d\u06a9\u0645 \u0645\u06cc\u0679\u0631\u06a9\u0633 (\u062e\u0631\u0627\u0628\u06cc \u06a9\u06cc \u0634\u0631\u062d\u060c \u0644\u06cc\u0679\u0646\u0633\u06cc p99\u060c \u06a9\u0627\u0631\u0648\u0628\u0627\u0631\u06cc KPIs) \u06c1\u0648\u0646\u0627 \u0636\u0631\u0648\u0631\u06cc \u06c1\u06d2\u06d4 \u062a\u0631\u0642\u06cc \u06a9\u0627 \u0645\u0648\u0642\u0639 \u0648\u0642\u062a \u0646\u06c1\u06cc\u06ba \u0628\u0644\u06a9\u06c1 \u0627\u0639\u062a\u0645\u0627\u062f \u06c1\u06d2\u06d4<\/p>\n<ol>\n<li>\n<p><strong>1%:<\/strong> \u0645\u06c1\u0644\u06a9 \u063a\u0644\u0637\u06cc\u0648\u06ba \u06a9\u0648 \u067e\u06a9\u0691\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062f\u06be\u0648\u0626\u06cc\u06ba \u06a9\u06cc \u062c\u0627\u0646\u0686\u06d4 \u0645\u06cc\u06ba \u06a9\u0631\u06cc\u0634\u0632 \u062a\u0644\u0627\u0634 \u06a9\u0631 \u0631\u06c1\u0627 \u06c1\u0648\u06ba\u060c \u0627\u0639\u062f\u0627\u062f \u0648 \u0634\u0645\u0627\u0631 \u0646\u06c1\u06cc\u06ba\u06d4 \u0627\u06af\u0631 24 \u06af\u06be\u0646\u0679\u0648\u06ba \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u06a9\u0686\u06be \u0646\u06c1\u06cc\u06ba \u067e\u06be\u0679\u0627 \u062a\u0648 \u062c\u0627\u0631\u06cc \u0631\u06a9\u06be\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>5%:<\/strong> \u0686\u06be\u0648\u0679\u06d2 \u067e\u06cc\u0645\u0627\u0646\u06d2 \u067e\u0631 \u0645\u06cc\u0679\u0631\u06a9\u0633 \u06a9\u06cc \u062a\u0648\u062b\u06cc\u0642 \u06a9\u0631\u06cc\u06ba\u06d4 \u0627\u0628 \u0627\u062a\u0646\u06cc \u0679\u0631\u06cc\u0641\u06a9 \u06c1\u06d2 \u06a9\u06c1 \u062e\u0631\u0627\u0628\u06cc \u06a9\u06cc \u0627\u0639\u0644\u06cc \u0634\u0631\u062d \u06a9\u0648 \u0645\u062d\u0633\u0648\u0633 \u06a9\u06cc\u0627 \u062c\u0627 \u0633\u06a9\u06d2\u060c \u0644\u06cc\u06a9\u0646 \u06a9\u0686\u06be \u063a\u0644\u0637 \u06c1\u0648\u0646\u06d2 \u06a9\u06cc \u0635\u0648\u0631\u062a \u0645\u06cc\u06ba \u0648\u0633\u06cc\u0639 \u067e\u06cc\u0645\u0627\u0646\u06d2 \u067e\u0631 \u0627\u062b\u0631 \u0688\u0627\u0644\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u0627\u0641\u06cc \u0646\u06c1\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>25%:<\/strong> \u0628\u0648\u062c\u06be \u0627\u0648\u0631 \u06a9\u0627\u0631\u06a9\u0631\u062f\u06af\u06cc \u067e\u0631 \u0627\u06cc\u06a9 \u0646\u0638\u0631 \u0688\u0627\u0644\u06cc\u06ba\u06d4 \u0627\u0633 \u067e\u06cc\u0645\u0627\u0646\u06d2 \u067e\u0631\u060c \u062f\u0648\u0691 \u06a9\u06d2 \u062d\u0627\u0644\u0627\u062a\u060c \u06a9\u06cc\u0634\u06d2 \u06a9\u06d2 \u063a\u0644\u0637 \u06c1\u0648\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u06a9\u06cc\u0691\u06d2\u060c \u0627\u0648\u0631 \u0633\u0633\u062a \u0633\u0648\u0627\u0644\u0627\u062a \u0633\u0627\u0645\u0646\u06d2 \u0622\u0646\u0627 \u0634\u0631\u0648\u0639 \u06c1\u0648 \u062c\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>50%:<\/strong> \u0634\u0645\u0627\u0631\u06cc\u0627\u062a\u06cc \u0627\u06c1\u0645\u06cc\u062a \u06a9\u06d2 \u0644\u06cc\u06d2 \u0645\u06cc\u0679\u0631\u06a9\u0633 \u06a9\u0627 \u0633\u0627\u062a\u06be \u0633\u0627\u062a\u06be \u0645\u0648\u0627\u0632\u0646\u06c1 \u06a9\u0631\u06cc\u06ba\u06d4 \u06c1\u0645\u0627\u0631\u06d2 \u067e\u0627\u0633 \u0628\u0627\u0645\u0639\u0646\u06cc A\/B \u0645\u0648\u0627\u0632\u0646\u06c1 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u0627\u0641\u06cc \u0628\u0691\u06cc \u062c\u0645\u0627\u0639\u062a \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>100%:<\/strong> \u0645\u06a9\u0645\u0644 \u0631\u0648\u0644 \u0622\u0624\u0679 \u06a9\u06d2 \u0628\u0639\u062f \u062c\u06be\u0646\u0688\u0648\u06ba \u06a9\u0648 \u0635\u0627\u0641 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<\/ol>\n<h2 id=\"heading-pattern-3-user-segment-targeting\">\u067e\u06cc\u0679\u0631\u0646 3: \u0635\u0627\u0631\u0641 \u06a9\u06d2 \u0637\u0628\u0642\u0627\u062a \u06a9\u0648 \u0646\u0634\u0627\u0646\u06c1 \u0628\u0646\u0627\u0646\u0627<\/h2>\n<p>\u0627\u0633 \u067e\u06cc\u0679\u0631\u0646 \u06a9\u0648 \u0645\u062e\u0635\u0648\u0635 \u06af\u0631\u0648\u067e\u0648\u06ba \u06a9\u0648 \u0646\u0634\u0627\u0646\u06c1 \u0628\u0646\u0627\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u060c \u062c\u06cc\u0633\u06d2 \u06a9\u06c1 \u0627\u0646\u062f\u0631\u0648\u0646\u06cc \u0645\u0644\u0627\u0632\u0645\u06cc\u0646\u060c \u0628\u06cc\u0679\u0627 \u0635\u0627\u0631\u0641\u06cc\u0646\u060c \u0645\u062e\u0635\u0648\u0635 \u0639\u0644\u0627\u0642\u0648\u06ba\u060c \u06cc\u0627 \u0627\u06a9\u0627\u0624\u0646\u0679 \u06a9\u06d2 \u062f\u0631\u062c\u06c1 \u0628\u0646\u062f\u06cc\u06d4<\/p>\n<pre><code class=\"language-typescript\">interface SegmentRule {\n  attribute: string;\n  operator: \"eq\" | \"in\" | \"gt\" | \"lt\" | \"contains\";\n  \/\/ Note: \"gt\" and \"lt\" operators only make sense with number values.\n  \/\/ A production system should validate operator-value compatibility\n  \/\/ at configuration time rather than relying on the caller.\n  value: string | string[] | number;\n}\n\ninterface FlagConfig {\n  defaultValue: boolean;\n  rules: Array<{\n    segments: SegmentRule[];\n    value: boolean;\n    rolloutPercentage?: number;\n  }>;\n}\n\nfunction evaluateFlag(\n  flagName: string,\n  config: FlagConfig,\n  context: Record<string unknown=\"\">\n): boolean {\n  for (const rule of config.rules) {\n    if (matchesAllSegments(rule.segments, context)) {\n      if (rule.rolloutPercentage !== undefined) {\n        \/\/ Reuses isEnabled() from Pattern 2\n        return isEnabled(flagName, context.userId as string, {\n          percentage: rule.rolloutPercentage,\n          sticky: true,\n        });\n      }\n      return rule.value;\n    }\n  }\n  return config.defaultValue;\n}\n<\/string><\/code><\/pre>\n<p>\u0627\u0648\u067e\u0631 \u0648\u0627\u0644\u06d2 \u06a9\u0648\u0688 \u0645\u06cc\u06ba\u060c <code>evaluateFlag<\/code> \u062a\u0631\u062a\u06cc\u0628 \u0633\u06d2 \u0642\u0648\u0627\u0639\u062f \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0627\u0639\u0627\u062f\u06c1 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u062c\u06cc\u0633\u06d2 \u06c1\u06cc \u0627\u0633\u06d2 \u06a9\u0648\u0626\u06cc \u0627\u0635\u0648\u0644 \u0645\u0644\u062a\u0627 \u06c1\u06d2 \u062c\u06c1\u0627\u06ba \u0635\u0627\u0631\u0641 \u06a9\u0627 \u0633\u06cc\u0627\u0642 \u0648 \u0633\u0628\u0627\u0642 \u062a\u0645\u0627\u0645 \u0637\u0628\u0642\u0648\u06ba \u06a9\u06cc \u0634\u0631\u0627\u0626\u0637 \u0633\u06d2 \u0645\u06cc\u0644 \u06a9\u06be\u0627\u062a\u0627 \u06c1\u06d2 \u0648\u0627\u067e\u0633 \u0622\u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u06c1\u0631 \u0627\u06cc\u06a9 <code>SegmentRule<\/code> \u062e\u0635\u0648\u0635\u06cc\u0627\u062a \u06a9\u06cc \u0648\u0636\u0627\u062d\u062a \u06a9\u0631\u06cc\u06ba\u060c \u062c\u06cc\u0633\u06d2 <code>\"accountTier\"<\/code>)\u060c \u0622\u067e\u0631\u06cc\u0679\u0631\u0632 (\u062c\u06cc\u0633\u06d2 <code>\"eq\"<\/code> \u06cc\u0627 <code>\"in\"<\/code>) \u0627\u0648\u0631 \u062c\u0633 \u0642\u062f\u0631 \u06a9\u0627 \u0645\u0648\u0627\u0632\u0646\u06c1 \u06a9\u0631\u0646\u0627 \u06c1\u06d2\u06d4 <code>matchesAllSegments<\/code> \u0633\u06cc\u06af\u0645\u0646\u0679 \u06a9\u06d2 \u062a\u0645\u0627\u0645 \u0627\u0635\u0648\u0644\u0648\u06ba \u06a9\u06cc \u062c\u0627\u0646\u0686 \u067e\u0691\u062a\u0627\u0644 \u06a9\u06cc \u062c\u0627\u062a\u06cc \u06c1\u06d2\u060c \u0627\u0648\u0631 \u06a9\u0633\u06cc \u0627\u0635\u0648\u0644 \u06a9\u06d2 \u0645\u0645\u0627\u062b\u0644 \u06c1\u0648\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062a\u0645\u0627\u0645 \u0642\u0648\u0627\u0639\u062f \u06a9\u0648 \u067e\u0627\u0633 \u06a9\u0631\u0646\u0627 \u0636\u0631\u0648\u0631\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u06af\u0631 \u0622\u067e \u06a9\u06d2 \u0645\u06cc\u0686 \u06a9\u06d2 \u0627\u0635\u0648\u0644 \u06c1\u06cc\u06ba: <code>rolloutPercentage<\/code>\u0627\u06cc\u06a9 \u0633\u0627\u062a\u06be \u067e\u0648\u0631\u06d2 \u062d\u0635\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u067e\u0631\u0686\u0645 \u06a9\u0648 \u0641\u0639\u0627\u0644 \u0646\u06c1 \u06a9\u0631\u06cc\u06ba\u06d4 \u0627\u0633 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 <code>isEnabled<\/code> \u067e\u06cc\u0679\u0631\u0646 2 \u0645\u06cc\u06ba\u060c \u0622\u067e \u0627\u0633\u06d2 \u062a\u0645\u0627\u0645 \u0628\u06cc\u0679\u0627 \u0635\u0627\u0631\u0641\u06cc\u0646 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0641\u0639\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0627\u0633\u06d2 \u0627\u067e\u0646\u06d2 10% \u0628\u06cc\u0679\u0627 \u0635\u0627\u0631\u0641\u06cc\u0646 \u062a\u06a9 \u067e\u06c1\u0646\u0686\u0627 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u0627\u06af\u0631 \u0646\u06c1\u06cc\u06ba <code>rolloutPercentage<\/code>\u0642\u0648\u0627\u0646\u06cc\u0646 \u06a9\u06d2 <code>value<\/code> \u0627\u0633\u06d2 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u0648\u0627\u067e\u0633 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u06af\u0631 \u06a9\u0648\u0626\u06cc \u0627\u0635\u0648\u0644 \u0628\u0627\u0644\u06a9\u0644 \u0628\u06be\u06cc \u0645\u0645\u0627\u062b\u0644 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2 \u062a\u0648\u060c \u062c\u06be\u0646\u0688\u0627 \u0627\u0633 \u067e\u0631 \u0648\u0627\u067e\u0633 \u0622\u062c\u0627\u062a\u0627 \u06c1\u06d2: <code>config.defaultValue<\/code>. \u0642\u0648\u0627\u0639\u062f \u06a9\u06cc \u062a\u0631\u062a\u06cc\u0628 \u062a\u0631\u062a\u06cc\u0628 \u0633\u06d2 \u06a9\u06cc \u062c\u0627\u062a\u06cc \u06c1\u06d2\u060c \u0627\u0633 \u0644\u06cc\u06d2 \u0645\u0632\u06cc\u062f \u0645\u062e\u0635\u0648\u0635 \u0642\u0648\u0627\u0639\u062f (\u0627\u0646\u062f\u0631\u0648\u0646\u06cc \u0645\u0644\u0627\u0632\u0645\u06cc\u0646\u060c \u0628\u06cc\u0679\u0627 \u0635\u0627\u0631\u0641\u06cc\u0646) \u06a9\u0648 \u0648\u0633\u06cc\u0639 \u062a\u0631 \u0642\u0648\u0627\u0639\u062f (\u06a9\u0644 \u0635\u0627\u0631\u0641\u06cc\u0646 \u06a9\u0627 \u0641\u06cc\u0635\u062f) \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0622\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2\u06d4<\/p>\n<p>\u0627\u06cc\u06a9 \u0639\u0627\u0645 \u06af\u0648 \u0679\u0648 \u0645\u0627\u0631\u06a9\u06cc\u0679 \u062d\u06a9\u0645\u062a \u0639\u0645\u0644\u06cc \u0637\u0628\u0642\u0627\u062a \u0627\u0648\u0631 \u062a\u0646\u0627\u0633\u0628 \u06a9\u0648 \u06cc\u06a9\u062c\u0627 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<ol>\n<li>\n<p>\u062f\u0627\u062e\u0644\u06cc \u0645\u0644\u0627\u0632\u0645\u06cc\u0646 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0641\u0639\u0627\u0644 \u06a9\u0631\u06cc\u06ba (\u0688\u0627\u06af \u0641\u0648\u0688\u0646\u06af)<\/p>\n<\/li>\n<li>\n<p>\u0628\u06cc\u0679\u0627 \u0622\u067e\u0679 \u0627\u0646 \u0635\u0627\u0631\u0641\u06cc\u0646 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0641\u0639\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p>10% \u0645\u0641\u062a \u062f\u0631\u062c\u06d2 \u06a9\u06d2 \u0635\u0627\u0631\u0641\u06cc\u0646 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0644\u0627\u0646\u0686 \u06a9\u06cc\u0627 \u06af\u06cc\u0627\u06d4<\/p>\n<\/li>\n<li>\n<p>10% \u0627\u062f\u0627 \u0634\u062f\u06c1 \u062f\u0631\u062c\u06d2 \u06a9\u06d2 \u0635\u0627\u0631\u0641\u06cc\u0646 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0644\u0627\u0646\u0686 \u06a9\u0631\u06cc\u06ba (\u0627\u0639\u0644\u06cc\u0670 \u062f\u0627\u0624 \u067e\u0631)<\/p>\n<\/li>\n<li>\n<p>\u0622\u06c1\u0633\u062a\u06c1 \u0622\u06c1\u0633\u062a\u06c1 \u062f\u0648\u0646\u0648\u06ba \u062d\u0635\u0648\u06ba \u0645\u06cc\u06ba \u0627\u0636\u0627\u0641\u06c1 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<\/ol>\n<h2 id=\"heading-pattern-4-multi-variant-flags\">\u067e\u06cc\u0679\u0631\u0646 4: \u0645\u062a\u0639\u062f\u062f \u0645\u062e\u062a\u0644\u0641 \u062c\u06be\u0646\u0688\u06d2<\/h2>\n<p>\u06cc\u06c1 A\/B\/C \u0679\u06cc\u0633\u0679\u0646\u06af \u06cc\u0627 \u06a9\u0646\u0641\u06cc\u06af\u0631\u06cc\u0634\u0646 \u062a\u063a\u06cc\u0631\u0627\u062a \u06a9\u06d2 \u0644\u06cc\u06d2 \u0645\u0641\u06cc\u062f \u06c1\u06d2 \u062c\u0628 \u0622\u067e \u06a9\u0648 \u0627\u0633\u06d2 \u0622\u0646\/\u0622\u0641 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u0645\u0632\u06cc\u062f \u0641\u0639\u0627\u0644\u06cc\u062a \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u06d4<\/p>\n<pre><code class=\"language-typescript\">type Variant = \"control\" | \"variant_a\" | \"variant_b\";\n\ninterface MultiVariantConfig {\n  variants: Array<{\n    name: Variant;\n    weight: number; \/\/ Percentage allocation\n  }>;\n}\n\n\/\/ config must be pre-validated with MultiVariantConfigSchema.parse()\nfunction getVariant(\n  flagName: string,\n  config: MultiVariantConfig,\n  userId: string\n): Variant {\n  \/\/ Include flagName in the hash so users land in independent buckets\n  \/\/ across different experiments, without this, bucket assignment\n  \/\/ is correlated and undermines statistical independence.\n  const hash = deterministicHash(`${flagName}:${userId}`) % 100;\n  let cumulative = 0;\n\n  for (const variant of config.variants) {\n    cumulative += variant.weight;\n    if (hash < cumulative) {\n      return variant.name;\n    }\n  }\n\n  return config.variants[0].name; \/\/ Fallback to first variant\n}\n\n\/\/ Usage\nconst variant = getVariant(\"search-experiment\", searchConfig, userId);\n\nswitch (variant) {\n  case \"control\":\n    return <currentsearch\/>;\n  case \"variant_a\":\n    return <searchwithfilters\/>;\n  case \"variant_b\":\n    return <searchwithai\/>;\n}\n<\/code><\/pre>\n<p><strong>\u0646\u0648\u0679: \u06cc\u0642\u06cc\u0646\u06cc \u0628\u0646\u0627\u0626\u06cc\u06ba \u06a9\u06c1 \u062a\u0645\u0627\u0645 \u0648\u0632\u0646 \u06a9\u0627 \u0645\u062c\u0645\u0648\u0639\u06c1 100 \u06c1\u06d2\u06d4<\/strong> \u0627\u0633 \u06a9\u06cc \u062a\u0648\u062b\u06cc\u0642 \u06a9\u0631\u06cc\u06ba \u062c\u0628 \u0622\u067e \u0627\u0633\u06d2 \u062a\u0631\u062a\u06cc\u0628 \u062f\u06cc\u06ba\u060c \u0646\u06c1 \u06a9\u06c1 \u062c\u0628 \u0622\u067e \u0627\u0633 \u06a9\u0627 \u062c\u0627\u0626\u0632\u06c1 \u0644\u06cc\u06ba\u06d4 \u0627\u06cc\u06a9 \u0646\u0627\u0642\u0635 \u062a\u0639\u0645\u06cc\u0631 \u0634\u062f\u06c1 \u062a\u062c\u0631\u0628\u06c1 \u0628\u0627\u0644\u06a9\u0644 \u0628\u06be\u06cc \u062a\u062c\u0631\u0628\u06c1 \u0646\u06c1 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u0628\u062f\u062a\u0631 \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u0648\u067e\u0631 \u0648\u0627\u0644\u06d2 \u06a9\u0648\u0688 \u0645\u06cc\u06ba\u060c <code>getVariant<\/code> \u06cc\u06c1 \u0627\u06cc\u06a9 \u0648\u0632\u0646\u06cc \u0644\u0627\u0679\u0631\u06cc \u06a9\u06cc \u0637\u0631\u062d \u06a9\u0627\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u06c1\u0645 \u067e\u0631\u0686\u0645 \u06a9\u0627 \u0646\u0627\u0645 \u0627\u0648\u0631 \u0635\u0627\u0631\u0641 ID \u06a9\u0648 0 \u0627\u0648\u0631 99 \u06a9\u06d2 \u062f\u0631\u0645\u06cc\u0627\u0646 \u0646\u0645\u0628\u0631 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u06c1\u06cc\u0634 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u067e\u06be\u0631 \u0648\u0632\u0646 \u062c\u0645\u0639 \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u0645\u062e\u062a\u0644\u0641 \u0642\u0633\u0645\u0648\u06ba \u06a9\u06cc \u0641\u06c1\u0631\u0633\u062a \u06a9\u0648 \u062f\u06cc\u06a9\u06be\u06cc\u06ba\u06d4<\/p>\n<p>\u0627\u06af\u0631 \u06c1\u06cc\u0634 \u06a9\u06cc \u0642\u06cc\u0645\u062a \u0686\u0644\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u06a9\u0644 \u0633\u06d2 \u0646\u06cc\u0686\u06d2 \u0622\u062a\u06cc \u06c1\u06d2\u060c \u062a\u0648 \u06cc\u06c1 \u0648\u06c1 \u0642\u0633\u0645 \u06c1\u06d2 \u062c\u0648 \u0622\u067e \u06a9\u0648 \u0645\u0644\u062a\u06cc \u06c1\u06d2\u06d4 \u0645\u062b\u0627\u0644 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631\u060c \u0627\u06af\u0631 \u06a9\u0646\u0679\u0631\u0648\u0644 \u0648\u0632\u0646 50 \u06c1\u06d2 <code>variant_a: 25<\/code>\u060c <code>variant_b: 25<\/code>\u06c1\u06cc\u0634 60 \u067e\u06c1\u0646\u0686 \u06af\u06cc\u0627\u06d4 <code>variant_a<\/code> (\u0645\u062c\u0645\u0648\u0639\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0627\u0633 \u0648\u0642\u062a: 75)\u060c \u06c1\u06cc\u0634 30 \u06a9\u0648 \u06a9\u0646\u0679\u0631\u0648\u0644 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2 (\u0645\u062c\u0645\u0648\u0639\u06cc: 50)\u06d4 \u0686\u0648\u0646\u06a9\u06c1 \u06c1\u06cc\u0634\u0632 \u062a\u0639\u06cc\u06cc\u0646\u0627\u062a\u06cc \u06c1\u06cc\u06ba\u060c \u0627\u0633\u06cc \u0644\u06cc\u06d2 \u0627\u06cc\u06a9 \u06c1\u06cc \u0635\u0627\u0631\u0641 \u06a9\u0648 \u06c1\u0645\u06cc\u0634\u06c1 \u0627\u06cc\u06a9 \u06c1\u06cc \u062c\u06be\u0646\u0688\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u06a9 \u062c\u06cc\u0633\u0627 \u062a\u063a\u06cc\u0631 \u0645\u0644\u06d2 \u06af\u0627 \u0627\u0648\u0631 \u062a\u062c\u0631\u0628\u06c1 \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u0648\u06ba \u0645\u06cc\u06ba \u062a\u0628\u062f\u06cc\u0644 \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u06af\u0627\u06d4<\/p>\n<p>\u06a9\u0627\u0644 \u0633\u0627\u0626\u0679 \u067e\u0631 \u0628\u06cc\u0627\u0646\u0627\u062a \u06a9\u0648 \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u06cc\u06ba \u067e\u06be\u0631 \u06c1\u0631 \u0627\u06cc\u06a9 \u0645\u062e\u062a\u0644\u0641 \u0646\u0627\u0645 \u06a9\u0648 \u0645\u062e\u062a\u0644\u0641 \u062c\u0632\u0648 \u0633\u06d2 \u0646\u0642\u0634\u06c1 \u0628\u0646\u0627\u0626\u06cc\u06ba\u06d4 <code>control<\/code> \u0645\u0648\u0627\u0632\u0646\u06d2 \u06a9\u06cc \u0628\u0646\u06cc\u0627\u062f \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0645\u0648\u062c\u0648\u062f\u06c1 \u062a\u062c\u0631\u0628\u0627\u062a \u06a9\u0648 \u067e\u06cc\u0634 \u06a9\u0631\u06cc\u06ba\u06d4 <code>variant_a<\/code> \u0627\u0648\u0631 <code>variant_b<\/code> \u062a\u062c\u0631\u0628\u06c1 \u06a9\u06cc\u0627 \u062c\u0627 \u0631\u06c1\u0627 \u0645\u062a\u0628\u0627\u062f\u0644 \u067e\u06cc\u0634 \u06a9\u0631\u06cc\u06ba\u06d4 \u06c1\u0631 \u0645\u062a\u0628\u0627\u062f\u0644 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0645\u06cc\u0679\u0631\u06a9\u0633 \u06a9\u0648 \u0679\u0631\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u0627\u0639\u062f\u0627\u062f\u0648\u0634\u0645\u0627\u0631 \u06a9\u06d2 \u0644\u062d\u0627\u0638 \u0633\u06d2 \u0627\u06c1\u0645 \u0646\u062a\u0627\u0626\u062c \u0627\u062e\u0630 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u0627\u0641\u06cc \u0679\u0631\u06cc\u0641\u06a9 \u06c1\u0648\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f \u0627\u0646 \u06a9\u0627 \u0645\u0648\u0627\u0632\u0646\u06c1 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-typescript\">import { z } from \"zod\";\n\nconst VariantSchema = z.object({\n  name: z.string(),\n  weight: z.number().min(0).max(100),\n});\n\nconst MultiVariantConfigSchema = z\n  .object({\n    variants: z.array(VariantSchema).min(1),\n  })\n  .refine(\n    (config) => {\n      const total = config.variants.reduce((sum, v) => sum + v.weight, 0);\n      return total === 100;\n    },\n    { message: \"Variant weights must sum to 100\" }\n  );\n\n\/\/ Validates at config load time \u2014 bad configs never reach evaluation\nconst config = MultiVariantConfigSchema.parse(rawConfig);\n<\/code><\/pre>\n<h2 id=\"heading-the-flag-lifecycle\">\u067e\u0631\u0686\u0645 \u0632\u0646\u062f\u06af\u06cc \u0633\u0627\u0626\u06cc\u06a9\u0644<\/h2>\n<p>\u062c\u06be\u0646\u0688\u06d2 \u062c\u0648 \u0627\u067e\u0646\u06d2 \u0645\u0642\u0635\u062f \u0633\u06d2 \u0628\u0627\u06c1\u0631 \u0631\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba \u0648\u06c1 \u062a\u06a9\u0646\u06cc\u06a9\u06cc \u0642\u0631\u0636 \u0628\u0646 \u062c\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0627\u0633 \u06a9\u0648 \u0631\u0648\u06a9\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2\u060c \u0622\u067e \u0644\u0627\u0626\u0641 \u0633\u0627\u0626\u06cc\u06a9\u0644 \u062a\u0631\u062a\u06cc\u0628 \u062f\u06d2 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<h3 id=\"heading-1-creation\">1. \u062a\u062e\u0644\u06cc\u0642<\/h3>\n<p>\u062a\u0645\u0627\u0645 \u062c\u06be\u0646\u0688\u0648\u06ba \u0645\u06cc\u06ba \u0645\u06cc\u0679\u0627 \u0688\u06cc\u0679\u0627 \u06c1\u0648\u0646\u0627 \u0636\u0631\u0648\u0631\u06cc \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-typescript\">interface FlagMetadata {\n  name: string;\n  owner: string;           \/\/ Team or person responsible\n  createdAt: Date;\n  expectedRemovalDate: Date; \/\/ Forces planning for cleanup\n  type: \"release\" | \"experiment\" | \"ops\" | \"permission\";\n  description: string;\n  jiraTicket?: string;      \/\/ Link to tracking issue\n}\n<\/code><\/pre>\n<p>\u06a9\u06c1 <code>expectedRemovalDate<\/code> \u06cc\u06c1 \u0635\u0631\u0641 \u0627\u0633 \u0635\u0648\u0631\u062a \u0645\u06cc\u06ba \u06a9\u0627\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u062c\u0628 \u06a9\u0648\u0626\u06cc \u0686\u06cc\u0632 \u0627\u0633\u06d2 \u0646\u0627\u0641\u0630 \u06a9\u0631\u06d2\u06d4 \u0645\u062e\u0635\u0648\u0635 \u0646\u0642\u0637\u06c1 \u0646\u0638\u0631 \u062f\u0631\u062c \u0630\u06cc\u0644 \u06c1\u06d2: \u0627\u06cc\u06a9 \u0637\u06d2 \u0634\u062f\u06c1 \u06a9\u0627\u0645 \u062c\u0648 \u0631\u0648\u0632\u0627\u0646\u06c1 \u0686\u0644\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u062c\u06be\u0646\u0688\u06d2 \u06a9\u06cc \u0645\u06cc\u0639\u0627\u062f \u062e\u062a\u0645 \u06c1\u0648\u0646\u06d2 \u067e\u0631 \u06a9\u0644\u06cc\u0646 \u0627\u067e \u0679\u06a9\u0679 \u0628\u0646\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-typescript\">\/\/ Run daily via cron or scheduled CI job\nasync function auditStaleFlags(flags: FlagMetadata[]) {\n  const now = new Date();\n  const staleFlags = flags.filter(\n    (f) =>\n      f.type === \"release\" &&\n      f.expectedRemovalDate < now\n  );\n\n  for (const flag of staleFlags) {\n    const daysOverdue = Math.floor(\n      (now.getTime() - flag.expectedRemovalDate.getTime()) \/ 86_400_000\n    );\n\n    \/\/ In practice, check for an existing open ticket before creating\n    \/\/ a duplicate. Use an upsert keyed on the flag name, or skip\n    \/\/ creation if an open ticket with the [Stale Flag] label exists.\n    await createJiraTicket({\n      title: `[Stale Flag] Remove \"${flag.name}\" (${daysOverdue} days overdue)`,\n      assignee: flag.owner,\n      priority: daysOverdue > 30 ? \"high\" : \"medium\",\n      labels: [\"tech-debt\", \"feature-flag-cleanup\"],\n    });\n\n    \/\/ Optionally: post to Slack, block deploys, or log warnings\n    logger.warn(`Flag \"${flag.name}\" is ${daysOverdue} days past removal date`);\n  }\n}\n<\/code><\/pre>\n<p>\u06a9\u0686\u06be \u0679\u06cc\u0645\u06cc\u06ba \u0645\u0632\u06cc\u062f \u0622\u06af\u06d2 \u0628\u0691\u06be\u062a\u06cc \u06c1\u06cc\u06ba \u0627\u0648\u0631 CI \u06a9\u0648 \u0646\u0627\u06a9\u0627\u0645 \u06a9\u0631\u062a\u06cc \u06c1\u06cc\u06ba \u0627\u06af\u0631 \u0627\u0646 \u06a9\u06cc \u06c1\u0679\u0627\u0646\u06d2 \u06a9\u06cc \u062a\u0627\u0631\u06cc\u062e\u0648\u06ba \u06a9\u06d2 \u0628\u0639\u062f \u0631\u06c1\u0627\u0626\u06cc \u06a9\u06d2 \u062c\u06be\u0646\u0688\u06d2 \u0645\u0648\u062c\u0648\u062f \u06c1\u0648\u06ba\u06d4 \u06cc\u06c1 \u062c\u0627\u0631\u062d\u0627\u0646\u06c1 \u0644\u06cc\u06a9\u0646 \u0645\u0648\u062b\u0631 \u06c1\u06d2\u06d4 \u0627\u0633 \u06a9\u06cc \u0648\u062c\u06c1 \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u06cc\u06c1 \u06cc\u0642\u06cc\u0646\u06cc \u0628\u0646\u0627\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u062c\u06be\u0646\u0688\u0627 \u06a9\u0628\u06be\u06cc \u0628\u06be\u06cc \u062d\u0627\u062f\u062b\u0627\u062a\u06cc \u0637\u0648\u0631 \u067e\u0631 \u062b\u0627\u0628\u062a \u0642\u062f\u0645 \u0646\u06c1\u06cc\u06ba \u0631\u06c1\u06d2 \u06af\u0627\u06d4<\/p>\n<h3 id=\"heading-2-active-management\">2. \u0641\u0639\u0627\u0644 \u0627\u0646\u062a\u0638\u0627\u0645<\/h3>\n<p>\u0644\u0627\u0646\u0686 \u06a9\u06d2 \u062f\u0648\u0631\u0627\u0646 \u067e\u0631\u0686\u0645 \u06a9\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06cc \u0646\u06af\u0631\u0627\u0646\u06cc \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<ul>\n<li>\n<p><strong>\u062e\u0631\u0627\u0628\u06cc \u06a9\u06cc \u0634\u0631\u062d:<\/strong> \u0631\u067e\u0648\u0631\u0679 \u0634\u062f\u06c1 \u0627\u0648\u0631 \u063a\u06cc\u0631 \u0631\u067e\u0648\u0631\u0679 \u0634\u062f\u06c1 \u06af\u0631\u0648\u067e\u0648\u06ba \u06a9\u0627 \u0645\u0648\u0627\u0632\u0646\u06c1<\/p>\n<\/li>\n<li>\n<p><strong>\u067e\u0648\u0634\u06cc\u062f\u06c1:<\/strong> \u06a9\u06cc\u0627 \u0646\u06cc\u0627 \u06a9\u0648\u0688 \u067e\u0627\u062a\u06be \u06a9\u0648\u0626\u06cc \u0627\u0648\u0648\u0631 \u06c1\u06cc\u0688 \u0634\u0627\u0645\u0644 \u06a9\u0631\u06d2 \u06af\u0627\u061f<\/p>\n<\/li>\n<li>\n<p><strong>\u0628\u0632\u0646\u0633 \u0645\u06cc\u0679\u0631\u06a9\u0633:<\/strong> \u062a\u0628\u0627\u062f\u0644\u0648\u06ba\u060c \u0645\u0634\u063a\u0648\u0644\u06cc\u062a\u060c \u0622\u0645\u062f\u0646\u06cc \u0641\u06cc \u062c\u0645\u0627\u0639\u062a<\/p>\n<\/li>\n<li>\n<p><strong>\u067e\u0631\u0686\u0645 \u06a9\u06cc \u062a\u0634\u062e\u06cc\u0635 \u06a9\u06cc \u062a\u0639\u062f\u0627\u062f:<\/strong> \u06a9\u06cc\u0627 \u062a\u0648\u0642\u0639 \u06a9\u06d2 \u0645\u0637\u0627\u0628\u0642 \u062c\u06be\u0646\u0688\u0648\u06ba \u06a9\u0648 \u0686\u06cc\u06a9 \u06a9\u06cc\u0627 \u062c\u0627 \u0631\u06c1\u0627 \u06c1\u06d2\u061f<\/p>\n<\/li>\n<\/ul>\n<h3 id=\"heading-3-cleanup\">3. \u0645\u0646\u0638\u0645 \u06a9\u0631\u0646\u0627<\/h3>\n<p>\u06cc\u06c1 \u0645\u0634\u06a9\u0644 \u062d\u0635\u06c1 \u06c1\u06d2\u06d4 \u067e\u0631\u0627\u0646\u06d2 \u062c\u06be\u0646\u0688\u06d2 \u062a\u06cc\u0632\u06cc \u0633\u06d2 \u062c\u0645\u0639 \u06c1\u0648 \u062c\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u0627\u06af\u0631 \u0622\u067e \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u0633\u06d2 \u062d\u0645\u0627\u06cc\u062a \u06cc\u0627\u0641\u062a\u06c1 \u0641\u0644\u06cc\u06af\u0646\u06af \u0633\u0633\u0679\u0645 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba (\u06cc\u0627 \u0645\u06cc\u0646\u06cc\u062c\u0688 \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0646\u0646\u062f\u06c1 \u06a9\u06d2 API \u0633\u06d2 \u0627\u0633\u062a\u0641\u0633\u0627\u0631 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba)\u060c \u062a\u0648 \u0627\u06cc\u06a9 \u0633\u0627\u062f\u06c1 \u0633\u0648\u0627\u0644 \u06a9\u0644\u06cc\u0646 \u0627\u067e \u0627\u0645\u06cc\u062f\u0648\u0627\u0631\u0648\u06ba \u06a9\u0648 \u0638\u0627\u06c1\u0631 \u06a9\u0631\u06d2 \u06af\u0627\u06d4 \u06cc\u06c1 \u0641\u0631\u0636 \u06a9\u0631\u062a\u0627 \u06c1\u06d2: <code>feature_flags<\/code> \u06a9\u0627\u0644\u0645\u0648\u06ba \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0627\u06cc\u06a9 \u062c\u062f\u0648\u0644 \u062c\u0633 \u0645\u06cc\u06ba \u06c1\u0631 \u067e\u0631\u0686\u0645 \u06a9\u06cc \u0645\u0648\u062c\u0648\u062f\u06c1 \u0631\u06cc\u0644\u06cc\u0632 \u06a9\u06cc \u0634\u0631\u062d\u060c \u0627\u0633 \u0634\u0631\u062d \u062a\u06a9 \u067e\u06c1\u0646\u0686\u0646\u06d2 \u06a9\u06cc \u062a\u0627\u0631\u06cc\u062e\u060c \u0627\u0648\u0631 \u0627\u0633 \u06a9\u06cc \u0642\u0633\u0645:<\/p>\n<pre><code class=\"language-sql\">-- Find flags that have been at 100% for over 30 days\n-- These are candidates for cleanup\nSELECT name, enabled_at\nFROM feature_flags\nWHERE percentage = 100\n  AND enabled_at < NOW() - INTERVAL '30 days'\n  AND type=\"release\";\n<\/code><\/pre>\n<p>\u0622\u067e \u067e\u0631\u0686\u0645 \u0635\u0627\u0641 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u06a9\u0648 \u062e\u0648\u062f\u06a9\u0627\u0631 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u062c\u0628 \u0631\u06cc\u0644\u06cc\u0632 \u06a9\u0627 \u062c\u06be\u0646\u0688\u0627 \u062f\u0648 \u06c1\u0641\u062a\u0648\u06ba \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u06a9\u06d2 \u0644\u06cc\u06d2 100% \u067e\u0631 \u06c1\u0648 \u062a\u0648 \u0627\u0644\u0631\u0679 \u0633\u06cc\u0679 \u06a9\u0631\u06cc\u06ba\u06d4 \u062e\u0648\u062f \u0628\u062e\u0648\u062f \u062c\u06cc\u0631\u0627 \u0679\u06a9\u0679 \u0628\u0646\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u0635\u062d\u06cc\u062d \u06a9\u0627\u0645 \u06a9\u0631\u0646\u06d2 \u0645\u06cc\u06ba \u0622\u0633\u0627\u0646\u06cc \u067e\u06cc\u062f\u0627 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<h2 id=\"heading-anti-patterns-to-avoid\">\u0627\u06cc\u0646\u0679\u06cc \u067e\u06cc\u0679\u0631\u0646 \u0633\u06d2 \u0628\u0686\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2<\/h2>\n<h3 id=\"heading-nested-flag-dependencies\">\u0646\u06cc\u0633\u0679\u0688 \u067e\u0631\u0686\u0645 \u0627\u0646\u062d\u0635\u0627\u0631<\/h3>\n<pre><code class=\"language-typescript\">\/\/ Don't do this\nif (flags.newCheckout) {\n  if (flags.newPaymentProcessor) {\n    if (flags.newFraudDetection) {\n      \/\/ Which combination was tested?\n    }\n  }\n}\n<\/code><\/pre>\n<p>\u062a\u06cc\u0646 \u0628\u0648\u0644\u06cc\u0646 \u062c\u06be\u0646\u0688\u06d2 \u0622\u0679\u06be \u0645\u0645\u06a9\u0646\u06c1 \u0631\u06cc\u0627\u0633\u062a\u06cc\u06ba \u0628\u0646\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0627\u0646 \u0645\u06cc\u06ba \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u062a\u0631 \u062d\u0627\u0644\u0627\u062a \u06a9\u0627 \u062a\u062c\u0631\u0628\u06c1 \u0646\u06c1\u06cc\u06ba \u06a9\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4 \u0627\u06af\u0631 \u062c\u06be\u0646\u0688\u06d2 \u0627\u06cc\u06a9 \u062f\u0648\u0633\u0631\u06d2 \u067e\u0631 \u0645\u0646\u062d\u0635\u0631 \u06c1\u06cc\u06ba\u060c \u062a\u0648 \u0627\u0646\u06c1\u06cc\u06ba \u0627\u06cc\u06a9 \u062c\u06be\u0646\u0688\u06d2 \u0645\u06cc\u06ba \u06cc\u06a9\u062c\u0627 \u06a9\u0631\u06cc\u06ba \u06cc\u0627 \u0648\u0627\u0636\u062d \u0637\u0648\u0631 \u067e\u0631 \u062f\u0631\u0633\u062a \u0627\u0645\u062a\u0632\u0627\u062c \u06a9\u06cc \u062f\u0633\u062a\u0627\u0648\u06cc\u0632 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<h3 id=\"heading-flag-driven-architecture\">\u067e\u0631\u0686\u0645 \u067e\u0631 \u0645\u0628\u0646\u06cc \u0641\u0646 \u062a\u0639\u0645\u06cc\u0631<\/h3>\n<pre><code class=\"language-typescript\">\/\/ Don't do this\nfunction calculatePrice(item: Item, flags: FeatureFlags) {\n  let price = item.basePrice;\n\n  if (flags.newTaxCalculation) price = applyNewTax(price);\n  else price = applyOldTax(price);\n\n  if (flags.loyaltyDiscount) price = applyLoyalty(price);\n\n  if (flags.bulkPricing && flags.newBulkTiers) {\n    price = applyNewBulkPricing(price);\n  } else if (flags.bulkPricing) {\n    price = applyOldBulkPricing(price);\n  }\n\n  return price;\n}\n<\/code><\/pre>\n<p>\u0627\u06af\u0631 \u0622\u067e \u06a9\u06cc \u06a9\u0627\u0631\u0648\u0628\u0627\u0631\u06cc \u0645\u0646\u0637\u0642 \u062c\u06be\u0646\u0688\u06d2 \u06a9\u06cc \u062a\u0634\u062e\u06cc\u0635 \u06a9\u06d2 \u0627\u0646\u062c\u0646 \u06a9\u06cc \u0637\u0631\u062d \u067e\u0691\u06be\u062a\u06cc \u06c1\u06d2\u060c \u062a\u0648 \u0622\u067e \u06a9\u0648 \u0688\u06cc\u0632\u0627\u0626\u0646 \u06a9\u0627 \u0645\u0633\u0626\u0644\u06c1 \u06c1\u06d2\u06d4 \u062c\u06be\u0646\u0688\u0648\u06ba \u06a9\u0648 \u0628\u0627\u0624\u0646\u0688\u0631\u06cc \u067e\u0631 \u0631\u06a9\u06be\u0646\u06d2 \u0627\u0648\u0631 \u06a9\u0646\u0688\u06cc\u0634\u0646\u0644\u0632 \u06a9\u0648 \u06c1\u0631 \u0637\u0631\u0641 \u0686\u06be\u0691\u06a9\u0646\u06d2 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2\u060c \u0622\u067e \u0627\u0646\u06c1\u06cc\u06ba \u0628\u0627\u0644\u06a9\u0644 \u0645\u062e\u062a\u0644\u0641 \u0646\u0641\u0627\u0630 \u06a9\u06cc \u0637\u0631\u0641 \u0644\u06d2 \u062c\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-typescript\">\/\/ Do this instead \u2014 flag check lives at the boundary\ninterface PricingStrategy {\n  calculate(item: Item): number;\n}\n\nconst legacyPricing: PricingStrategy = {\n  calculate(item) {\n    return applyOldTax(applyOldBulkPricing(item.basePrice));\n  },\n};\n\nconst newPricing: PricingStrategy = {\n  calculate(item) {\n    return applyNewTax(applyLoyalty(applyNewBulkPricing(item.basePrice)));\n  },\n};\n\n\/\/ Single flag check at the entry point \u2014 no conditionals in business logic\nconst pricing = flags.newPricingEngine ? newPricing : legacyPricing;\nconst finalPrice = pricing.calculate(item);\n<\/code><\/pre>\n<p>\u06c1\u0631 \u0639\u0645\u0644 \u062e\u0648\u062f \u0645\u062e\u062a\u0627\u0631 \u0627\u0648\u0631 \u0622\u0632\u0627\u062f\u0627\u0646\u06c1 \u0637\u0648\u0631 \u067e\u0631 \u0642\u0627\u0628\u0644 \u0622\u0632\u0645\u0627\u0626\u0634 \u06c1\u06d2\u06d4 \u062c\u06be\u0646\u0688\u0627 \u0641\u06cc\u0635\u0644\u06c1 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 <em>\u06a9\u0648\u0626\u06cc \u0628\u06be\u06cc<\/em> \u0648\u06c1 \u062d\u06a9\u0645\u062a \u0639\u0645\u0644\u06cc \u0646\u06c1\u06cc\u06ba \u062c\u0648 \u0622\u067e \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 <em>\u06a9\u0633 \u0637\u0631\u062d<\/em> \u062d\u06a9\u0645\u062a \u0639\u0645\u0644\u06cc \u06a9\u0627\u0645 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-no-default-fallback\">\u06a9\u0648\u0626\u06cc \u0688\u06cc\u0641\u0627\u0644\u0679 \u0641\u0627\u0644 \u0628\u06cc\u06a9 \u0646\u06c1\u06cc\u06ba\u06d4<\/h3>\n<p>\u06c1\u0645\u06cc\u0634\u06c1 \u0648\u0636\u0627\u062d\u062a \u06a9\u0631\u06cc\u06ba \u06a9\u06c1 \u062c\u0628 \u0641\u0644\u06cc\u06af \u0633\u0631\u0648\u0633 \u062f\u0633\u062a\u06cc\u0627\u0628 \u0646\u06c1 \u06c1\u0648 \u062a\u0648 \u06a9\u06cc\u0627 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-typescript\">function getFlag(name: string, defaultValue: boolean): boolean {\n  try {\n    return flagService.evaluate(name);\n  } catch {\n    \/\/ Flag service is down? Fail safe\n    logger.warn(`Flag service unavailable, using default for ${name}`);\n    return defaultValue;\n  }\n}\n<\/code><\/pre>\n<p>\u0633\u06cc\u0641 \u0622\u067e\u0634\u0646 \u0688\u06cc\u0641\u0627\u0644\u0679 \u06c1\u06d2\u06d4 \u0646\u0626\u06cc \u062e\u0635\u0648\u0635\u06cc\u0627\u062a \u06a9\u06d2 \u0644\u06cc\u06d2\u060c \u0645\u062d\u0641\u0648\u0638 \u0688\u06cc\u0641\u0627\u0644\u0679\u0633 \u0639\u0627\u0645 \u0637\u0648\u0631 \u067e\u0631 \u06c1\u0648\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 <code>false<\/code> (\u0641\u0646\u06a9\u0634\u0646 \u0622\u0641)\u06d4 \u06a9\u0650\u0644 \u0633\u0648\u0626\u0686\u0632 \u06a9\u06d2 \u0644\u06cc\u06d2\u060c \u0645\u062d\u0641\u0648\u0638 \u0688\u06cc\u0641\u0627\u0644\u0679\u0633 \u0639\u0627\u0645 \u0637\u0648\u0631 \u067e\u0631 \u06c1\u0648\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 <code>true<\/code> (\u0646\u0638\u0627\u0645 \u0686\u0644 \u0631\u06c1\u0627 \u06c1\u06d2)\u06d4<\/p>\n<h2 id=\"heading-testing-with-feature-flags\">\u062e\u0635\u0648\u0635\u06cc\u062a \u06a9\u06d2 \u062c\u06be\u0646\u0688\u0648\u06ba \u06a9\u06d2 \u0633\u0627\u062a\u06be \u062c\u0627\u0646\u0686<\/h2>\n<p>\u062e\u0635\u0648\u0635\u06cc\u062a \u06a9\u06d2 \u062c\u06be\u0646\u0688\u06d2 \u0679\u06cc\u0633\u0679 \u06a9\u06cc \u0633\u0637\u062d \u06a9\u0648 \u0636\u0631\u0628 \u062f\u06cc\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0622\u067e \u062c\u0633 \u0686\u06cc\u0632 \u06a9\u06cc \u062c\u0627\u0646\u0686 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba \u0627\u0633 \u06a9\u06d2 \u0628\u0627\u0631\u06d2 \u0645\u06cc\u06ba \u0627\u062d\u062a\u06cc\u0627\u0637 \u0633\u06d2 \u0633\u0648\u0686\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-typescript\">describe(\"checkout flow\", () => {\n  it(\"works with new checkout enabled\", () => {\n    setFlag(\"newCheckout\", true);\n    \/\/ Test the new path\n  });\n\n  it(\"works with new checkout disabled\", () => {\n    setFlag(\"newCheckout\", false);\n    \/\/ Test the old path\n  });\n\n  \/\/ Only test valid flag combinations\n  it(\"works with new checkout + new payment\", () => {\n    setFlag(\"newCheckout\", true);\n    setFlag(\"newPaymentProcessor\", true);\n    \/\/ Test the combined path\n  });\n});\n<\/code><\/pre>\n<p>\u06c1\u0631 \u062a\u0631\u062a\u06cc\u0628 \u06a9\u06cc \u062c\u0627\u0646\u0686 \u0646\u06c1 \u06a9\u0631\u06cc\u06ba\u06d4 \u0627\u0646 \u0645\u062c\u0645\u0648\u0639\u0648\u06ba \u06a9\u06cc \u062c\u0627\u0646\u0686 \u06a9\u0631\u06cc\u06ba \u062c\u0646\u06c1\u06cc\u06ba \u0622\u067e \u0639\u0645\u0644\u06cc \u0637\u0648\u0631 \u067e\u0631 \u062a\u0639\u06cc\u0646\u0627\u062a \u06a9\u0631\u0646\u0627 \u0686\u0627\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<h2 id=\"heading-choosing-a-flag-system\">\u067e\u0631\u0686\u0645 \u06a9\u0627 \u0646\u0638\u0627\u0645 \u0645\u0646\u062a\u062e\u0628 \u06a9\u0631\u06cc\u06ba\u06d4<\/h2>\n<table>\n<thead>\n<tr>\n<th>\u0646\u0642\u0637\u06c1 \u0646\u0638\u0631<\/th>\n<th>\u0645\u06cc\u0631\u0679<\/th>\n<th>\u0646\u0642\u0635\u0627\u0646<\/th>\n<th>\u0628\u06c1\u062a\u0631\u06cc\u0646 \u06c1\u062f\u0641<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><strong>\u062a\u0631\u062a\u06cc\u0628 \u0641\u0627\u0626\u0644<\/strong><\/td>\n<td>\u0633\u0627\u062f\u06c1 \u0627\u0648\u0631 \u0648\u0631\u0698\u0646<\/td>\n<td>\u062f\u0648\u0628\u0627\u0631\u06c1 \u062a\u0642\u0633\u06cc\u0645 \u062f\u0631\u06a9\u0627\u0631 \u06c1\u06d2\u06d4<\/td>\n<td>\u0686\u06be\u0648\u0679\u06cc \u0679\u06cc\u0645\u060c \u0686\u0646\u062f \u062c\u06be\u0646\u0688\u06d2<\/td>\n<\/tr>\n<tr>\n<td><strong>\u0645\u0627\u062d\u0648\u0644\u06cc\u0627\u062a\u06cc \u0645\u062a\u063a\u06cc\u0631\u0627\u062a<\/strong><\/td>\n<td>\u0633\u0627\u062f\u06c1 \u0627\u0648\u0631 \u0645\u0627\u062d\u0648\u0644 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0645\u062e\u0635\u0648\u0635<\/td>\n<td>\u062f\u0648\u0628\u0627\u0631\u06c1 \u0634\u0631\u0648\u0639 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2\u06d4<\/td>\n<td>\u0622\u067e\u0631\u06cc\u0634\u0646 \u067e\u0631\u0686\u0645<\/td>\n<\/tr>\n<tr>\n<td><strong>\u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633<\/strong><\/td>\n<td>\u0645\u062a\u062d\u0631\u06a9\u060c \u06a9\u0648\u0626\u06cc \u062f\u0648\u0628\u0627\u0631\u06c1 \u0634\u0631\u0648\u0639 \u0646\u06c1\u06cc\u06ba<\/td>\n<td>\u0627\u06cc\u06a9 UI \u0628\u0646\u0627\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2\u06d4<\/td>\n<td>\u0628\u0691\u06be\u062a\u06cc \u06c1\u0648\u0626\u06cc \u0679\u06cc\u0645<\/td>\n<\/tr>\n<tr>\n<td><strong>\u0645\u0646\u0638\u0645 \u0633\u0631\u0648\u0633<\/strong> (\u0644\u0627\u0646\u0686 \u0688\u0627\u0631\u06a9\u0644\u06cc\u060c \u0627\u0646\u0644\u06cc\u0634)<\/td>\n<td>\u0645\u06a9\u0645\u0644 \u062e\u0635\u0648\u0635\u06cc\u0627\u062a \u0648\u0627\u0644\u06d2 \u062a\u062c\u0632\u06cc\u0627\u062a<\/td>\n<td>\u0644\u0627\u06af\u062a\u060c \u0648\u06cc\u0646\u0688\u0631 \u0644\u0627\u06a9 \u0627\u0646<\/td>\n<td>\u0679\u06cc\u0645 \u06a9\u06cc \u062a\u0648\u0633\u06cc\u0639<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u0633\u0627\u062f\u06c1 \u0634\u0631\u0648\u0639 \u06a9\u0631\u06cc\u06ba\u06d4 \u0627\u06af\u0631 \u0622\u067e \u06a9\u06d2 \u067e\u0627\u0633 5 \u062c\u06be\u0646\u0688\u06d2 \u06c1\u06cc\u06ba \u062a\u0648\u060c \u06a9\u0646\u0641\u06cc\u06af\u0631\u06cc\u0634\u0646 \u0641\u0627\u0626\u0644 \u06cc\u0627 \u0645\u0627\u062d\u0648\u0644\u06cc\u0627\u062a\u06cc \u0645\u062a\u063a\u06cc\u0631 \u0679\u06be\u06cc\u06a9 \u06c1\u06d2\u06d4 \u0627\u06af\u0631 \u0622\u067e \u06a9\u0648 \u0627\u067e\u0646\u06cc \u062a\u0645\u0627\u0645 \u0633\u0631\u0648\u0633\u0632 \u0645\u06cc\u06ba \u0627\u06c1\u062f\u0627\u0641\u06cc \u0642\u0648\u0627\u0646\u06cc\u0646\u060c \u0622\u0688\u0679 \u0644\u0627\u06af\u0632\u060c \u0627\u0648\u0631 \u0631\u06cc\u0626\u0644 \u0679\u0627\u0626\u0645 \u0627\u067e \u0688\u06cc\u0679\u0633 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2\u060c \u062a\u0648 \u0627\u06cc\u06a9 \u0645\u0646\u0638\u0645 \u0633\u0631\u0648\u0633 \u067e\u0631 \u062c\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<h2 id=\"heading-conclusion\">\u0646\u062a\u06cc\u062c\u06c1<\/h2>\n<p>\u0627\u0633 \u0645\u0636\u0645\u0648\u0646 \u0645\u06cc\u06ba\u060c \u0622\u067e \u0646\u06d2 \u0686\u0627\u0631 \u0628\u0646\u06cc\u0627\u062f\u06cc \u0646\u0645\u0648\u0646\u0648\u06ba \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u0641\u06cc\u0686\u0631 \u0641\u0644\u06cc\u06af\u0632 \u06a9\u0648 \u0644\u0627\u06af\u0648 \u06a9\u0631\u0646\u06d2 \u06a9\u0627 \u0637\u0631\u06cc\u0642\u06c1 \u0633\u06cc\u06a9\u06be\u0627: \u0633\u0627\u062f\u06c1 \u0628\u0648\u0644\u06cc\u0646 \u0679\u0648\u06af\u0644\u0632\u060c \u0633\u0679\u06a9\u06cc \u06c1\u06cc\u0634\u0646\u06af \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0641\u06cc\u0635\u062f \u067e\u0631 \u0645\u0628\u0646\u06cc \u0631\u06cc\u0644\u06cc\u0632\u0632\u060c \u06cc\u0648\u0632\u0631 \u0633\u06cc\u06af\u0645\u0646\u0679 \u0679\u0627\u0631\u06af\u0679\u0646\u06af\u060c \u0627\u0648\u0631 A\/B \u0679\u06cc\u0633\u0679\u0646\u06af \u06a9\u06d2 \u0644\u06cc\u06d2 \u0645\u0644\u0679\u06cc \u0648\u06cc\u0631\u06cc\u0646\u0679 \u0641\u0644\u06cc\u06af\u0632\u06d4<\/p>\n<p>\u0622\u067e \u0646\u06d2 \u06cc\u06c1 \u0628\u06be\u06cc \u0633\u06cc\u06a9\u06be\u0627 \u06a9\u06c1 \u0641\u0644\u06cc\u06af \u0644\u0627\u0626\u0641 \u0633\u0627\u0626\u06cc\u06a9\u0644 \u06a9\u0648 \u06a9\u0633 \u0637\u0631\u062d \u0645\u0646\u0638\u0645 \u06a9\u0631\u0646\u0627 \u06c1\u06d2\u060c \u0639\u0627\u0645 \u0627\u06cc\u0646\u0679\u06cc \u067e\u06cc\u0679\u0631\u0646 \u0633\u06d2 \u0628\u0686\u0646\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 \u062c\u06be\u0646\u0688\u0648\u06ba \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u0645\u0624\u062b\u0631 \u0637\u0631\u06cc\u0642\u06d2 \u0633\u06d2 \u062c\u0627\u0646\u0686 \u06a9\u0631\u0646\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u06c1\u0645 \u0646\u06a9\u0627\u062a \u06a9\u0627 \u0645\u062e\u062a\u0635\u0631 \u062e\u0644\u0627\u0635\u06c1 \u062f\u0631\u062c \u0630\u06cc\u0644 \u06c1\u06d2:<\/p>\n<ol>\n<li>\n<p><strong>\u0631\u06cc\u0644\u06cc\u0632 \u0633\u06d2 \u0627\u0644\u06af \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc\u0627\u06ba\u06d4<\/strong> \u062c\u06be\u0646\u0688\u06d2 \u06a9\u06d2 \u067e\u06cc\u0686\u06be\u06d2 \u062c\u06c1\u0627\u0632 \u06a9\u0627 \u06a9\u0648\u0688\u060c \u0627\u0639\u062a\u0645\u0627\u062f \u06c1\u0648\u0646\u06d2 \u067e\u0631 \u062c\u0627\u0631\u06cc \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u0641\u06a9\u0633\u0688 \u06c1\u06cc\u0634\u0646\u06af \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/strong> \u0635\u0627\u0631\u0641\u06cc\u0646 \u06a9\u0648 \u0645\u0633\u062a\u0642\u0644 \u062a\u062c\u0631\u0628\u06c1 \u062d\u0627\u0635\u0644 \u06a9\u0631\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u062a\u0646\u0638\u06cc\u0645\u06cc \u0645\u0646\u0635\u0648\u0628\u06c1:<\/strong> \u062a\u0645\u0627\u0645 \u0631\u06cc\u0644\u06cc\u0632 \u062c\u06be\u0646\u0688\u0648\u06ba \u06a9\u06cc \u0645\u06cc\u0639\u0627\u062f \u062e\u062a\u0645 \u06c1\u0648\u0646\u06d2 \u06a9\u06cc \u062a\u0627\u0631\u06cc\u062e \u06c1\u0648\u0646\u06cc \u0686\u0627\u06c1\u06cc\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u0646\u06cc\u0633\u0679\u0688 \u067e\u0631\u0686\u0645 \u06a9\u06d2 \u0627\u0646\u062d\u0635\u0627\u0631 \u0633\u06d2 \u0628\u0686\u06cc\u06ba\u06d4<\/strong> \u0627\u0645\u062a\u0632\u0627\u062c \u06a9\u06cc \u062d\u0627\u0644\u062a\u0648\u06ba \u06a9\u06cc \u062c\u0627\u0646\u0686 \u0646\u06c1\u06cc\u06ba \u06a9\u06cc \u062c\u0627\u0633\u06a9\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u0628\u0646\u06cc\u0627\u062f\u06cc \u0645\u062d\u0641\u0648\u0638:<\/strong> \u0627\u06af\u0631 \u0641\u0644\u06cc\u06af \u0633\u0631\u0648\u0633 \u0628\u0646\u062f \u06c1\u06d2 \u062a\u0648 \u06cc\u06c1 \u0645\u062d\u0641\u0648\u0638 \u062d\u0627\u0644\u062a \u0645\u06cc\u06ba \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648 \u062c\u0627\u0626\u06d2 \u06af\u06cc\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u062c\u06be\u0646\u0688\u0648\u06ba \u06a9\u0648 \u0646\u0638\u0631 \u0645\u06cc\u06ba \u0631\u06a9\u06be\u06cc\u06ba\u06d4<\/strong> \u0635\u0631\u0641 \u0627\u06cc\u06a9 \u0645\u062e\u062a\u0644\u0641 \u0646\u0641\u0627\u0630 \u06a9\u06cc \u0637\u0631\u0641 \u0628\u0691\u06be\u06cc\u06ba \u0627\u0648\u0631 \u0686\u0627\u0631\u0648\u06ba \u0637\u0631\u0641 \u06a9\u0646\u0688\u06cc\u0634\u0646\u0644 \u0646\u06c1 \u0686\u06be\u0691\u06a9\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u062f\u0648\u0646\u0648\u06ba \u06af\u0631\u0648\u06c1\u0648\u06ba \u06a9\u06cc \u0646\u06af\u0631\u0627\u0646\u06cc \u06a9\u06cc \u062c\u0627\u0626\u06d2 \u06af\u06cc\u06d4<\/strong> \u062e\u0631\u0627\u0628\u06cc \u06a9\u06cc \u0634\u0631\u062d\u060c \u062a\u0627\u062e\u06cc\u0631\u060c \u0627\u0648\u0631 \u06a9\u0627\u0631\u0648\u0628\u0627\u0631\u06cc \u0645\u06cc\u0679\u0631\u06a9\u0633 \u06a9\u0627 \u0645\u0648\u0627\u0632\u0646\u06c1 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<\/ol>\n<p>\u0627\u0646 \u062a\u0645\u0627\u0645 \u0646\u0645\u0648\u0646\u0648\u06ba \u06a9\u06cc \u062a\u06be\u0631\u0648 \u0644\u0627\u0626\u0646: \u0641\u06cc\u0686\u0631 \u0641\u0644\u06cc\u06af \u0631\u0633\u06a9 \u0645\u06cc\u0646\u062c\u0645\u0646\u0679 \u0679\u0648\u0644 \u06c1\u06cc\u06ba\u060c \u06a9\u0648\u0688 \u0622\u0631\u06af\u0646\u0627\u0626\u0632\u06cc\u0634\u0646 \u0679\u0648\u0644 \u0646\u06c1\u06cc\u06ba\u06d4 \u0627\u0633\u06d2 \u0646\u0645\u0627\u0626\u0634 \u06a9\u0648 \u06a9\u0646\u0679\u0631\u0648\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u060c \u0646\u06c1 \u06a9\u06c1 \u0627\u067e\u0646\u06cc \u0645\u0646\u0637\u0642 \u06a9\u06cc \u062a\u0634\u06a9\u06cc\u0644 \u06a9\u06d2 \u0644\u06cc\u06d2\u06d4<\/p>\n<p>\u0627\u0633\u0679\u0631\u06cc\u0645\u0631\u0632 \u0628\u06be\u06cc\u062c\u06cc\u06ba\u060c \u0627\u067e\u0646\u06d2 \u0631\u0648\u0644 \u0622\u0624\u0679 \u06a9\u06cc \u067e\u06cc\u0645\u0627\u0626\u0634 \u06a9\u0631\u06cc\u06ba\u060c \u0627\u067e\u0646\u06d2 \u0645\u06cc\u0679\u0631\u06a9\u0633 \u06a9\u0648 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u060c \u0627\u0648\u0631 \u067e\u06be\u0631 \u0645\u0646\u0638\u0645 \u06a9\u0631\u06cc\u06ba\u06d4 \u062c\u0633 \u0644\u0645\u062d\u06d2 \u0627\u06cc\u06a9 \u062c\u06be\u0646\u0688\u0627 \u0627\u067e\u0646\u06d2 \u0686\u06a9\u0631 \u06a9\u0648 \u0628\u0646\u062f \u06a9\u0631 \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u060c \u06cc\u06c1 \u0627\u06cc\u06a9 \u0630\u0645\u06c1 \u062f\u0627\u0631\u06cc \u06c1\u06d2\u06d4<\/p>\n<\/p><\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u0641\u06cc\u0686\u0631 \u062c\u06be\u0646\u0688\u06d2 \u0622\u067e \u06a9\u06cc \u0679\u06cc\u0645 \u06a9\u06d2 \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u06c1\u062a\u06be\u06cc\u0627\u0631\u0648\u06ba \u0645\u06cc\u06ba \u0633\u0628 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u0637\u0627\u0642\u062a\u0648\u0631 \u0679\u0648\u0644\u0632 \u0645\u06cc\u06ba \u0633\u06d2 \u0627\u06cc\u06a9 \u06c1\u06cc\u06ba\u06d4 \u0648\u06c1 \u0627\u0644\u06af \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u0633\u06d2 \u0631\u06c1\u0627\u0626\u06cc\u0627\u0633 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u0622\u067e \u06a9\u06cc CI\/CD \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u06c1\u0631 \u0627\u0646\u0636\u0645\u0627\u0645 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u06a9\u0648\u0688 \u06a9\u0648 \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u0633\u0631\u0648\u0631\u0632 \u067e\u0631 \u062f\u06be\u06a9\u06cc\u0644 \u0633\u06a9\u062a\u06cc \u06c1\u06d2\u060c \u0644\u06cc\u06a9\u0646 \u0622\u067e \u06a9\u06d2 \u0635\u0627\u0631\u0641\u06cc\u0646 \u06a9\u0648 \u0646\u06cc\u0627 \u0631\u0648\u06cc\u06c1 \u062a\u0628\u06be\u06cc \u0646\u0638\u0631 \u0622\u0626\u06d2 [&hellip;]<\/p>\n","protected":false},"author":7,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[1],"tags":[],"class_list":["post-29354","post","type-post","status-publish","format-standard","hentry","category-blog"],"_links":{"self":[{"href":"https:\/\/umang.pk\/ur\/wp-json\/wp\/v2\/posts\/29354","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/umang.pk\/ur\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/umang.pk\/ur\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/umang.pk\/ur\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/umang.pk\/ur\/wp-json\/wp\/v2\/comments?post=29354"}],"version-history":[{"count":0,"href":"https:\/\/umang.pk\/ur\/wp-json\/wp\/v2\/posts\/29354\/revisions"}],"wp:attachment":[{"href":"https:\/\/umang.pk\/ur\/wp-json\/wp\/v2\/media?parent=29354"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/umang.pk\/ur\/wp-json\/wp\/v2\/categories?post=29354"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/umang.pk\/ur\/wp-json\/wp\/v2\/tags?post=29354"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}