بدهی فنی چیست؟ راهنمای شناسایی، اولویت‌بندی و کاهش

بدهی فنی هزینه آینده‌ای است که از یک تصمیم طراحی، کدنویسی، زیرساخت یا فرایند امروز ایجاد می‌شود. گاهی این تصمیم آگاهانه و برای رسیدن به یک مهلت واقعی است؛ گاهی از نبود دانش، تست، مالکیت یا نگهداری شکل می‌گیرد. مسئله وجود هر بدهی نیست؛ بدهی پنهان، بدون مالک و بدون برنامه است که سرعت و ریسک پروژه را فرسوده می‌کند.

مدیریت بدهی فنی به معنی بازنویسی دائمی یا توقف Feature نیست. تیم باید Debt Item را قابل مشاهده کند، «بهره» آن را در Incident و زمان تغییر بسنجد، با هدف کسب‌وکار اولویت دهد و کوچک‌ترین اقدام مؤثر را انتخاب کند.

این راهنما تعریف، انواع، Technical Debt Register، روش اولویت‌بندی، بودجه، KPI، برنامه ۹۰روزه و مثال‌های پروژه وب را ارائه می‌کند.

بدهی فنی چیست؟

Software Engineering Institute دانشگاه Carnegie Mellon بدهی فنی را رویکرد طراحی یا ساختی تعریف می‌کند که کوتاه‌مدت سریع است، اما همان کار را در آینده گران‌تر می‌کند. SEI بر قابل‌مشاهده‌کردن بدهی، شناخت نوع آن و واردکردنش به برنامه پروژه تأکید دارد.

مثال‌ها:

  • کپی‌کردن منطق قیمت در چند سرویس برای تحویل فوری؛
  • ماندن روی کتابخانه بدون Patch به‌دلیل شکستن Plugin قدیمی؛
  • نداشتن تست برای Checkout و ترس از هر تغییر؛
  • Database Schema که گزارش جدید را بسیار گران می‌کند؛
  • Deploy دستی که فقط یک نفر می‌داند؛
  • صفحه‌ای که با هر Feature، JavaScript و CLS بیشتری می‌گیرد؛
  • نبود Runbook و طولانی‌شدن بازیابی Incident.

بدهی فنی با باگ و کار ناتمام چه فرقی دارد؟

مفهومتعریفنمونه
Bugرفتار خلاف انتظار یا قراردادمبلغ سبد اشتباه محاسبه می‌شود
Debtساختاری که تغییر یا نگهداری را گران می‌کندمنطق مبلغ در پنج محل تکرار شده است
Feature Gapقابلیت هنوز ساخته نشدهپرداخت قسطی نداریم
Riskرویداد نامطمئن با پیامداحتمال پایان پشتیبانی Runtime
Defect in processضعف روش تحویلRelease بدون Review امنیت

یک Item می‌تواند چند ماهیت داشته باشد. Dependency آسیب‌پذیر هم Defect امنیتی است و هم بدهی نگهداری. Label مهم‌تر از تصمیم اقدام نیست، اما تعریف مشترک جلوی Backlog مبهم را می‌گیرد.

اصل و بهره بدهی فنی

استعاره بدهی دو جزء مفید دارد:

  • Principal: هزینه اصلاح یا جایگزینی؛
  • Interest: هزینه تکرارشونده‌ای که تا اصلاح پرداخت می‌کنید.

بهره می‌تواند زمان Debug، Review طولانی، Incident، Cloud Cost، فرصت ازدست‌رفته، Onboarding کند یا ترس از Release باشد. Principal نیز ثابت نیست؛ با ادامه توسعه روی پایه ضعیف ممکن است رشد کند.

Debt ItemPrincipal تقریبیInterest قابل مشاهده
تست‌نداشتن Checkoutساخت Harness و تست بحرانیQA دستی و Regression هر Release
کتابخانه EOLUpgrade و رفع ناسازگاریCVE، Patch دستی و Block Feature
Deploy دستیPipeline و مستندسازیخطا، انتظار و Recovery کند
Query کندIndex/Schema/CacheLatency، Scale Cost و Timeout
CSS پراکندهToken و Component MigrationRegression بصری و زمان تغییر

آیا همه بدهی فنی بد است؟

خیر. بدهی آگاهانه می‌تواند برای آزمایش فرضیه، پاسخ به Incident یا رسیدن به مهلت قانونی منطقی باشد، اگر:

  • محدوده و دلیل ثبت شود؛
  • ریسک پذیرفته‌شده مالک داشته باشد؛
  • Exit Criteria و تاریخ بازبینی تعیین شود؛
  • بدهی روی مسیر بحرانی تکثیر نشود؛
  • کنترل جبرانی وجود داشته باشد؛
  • هزینه آینده در تصمیم کسب‌وکار دیده شود.

«بعداً تمیز می‌کنیم» بدون Item و Trigger، استراتژی نیست.

انواع بدهی فنی

بدهی معماری

مرز سرویس نامناسب، Coupling شدید، چرخه Dependency، Shared Database بدون Ownership یا Monolith بدون Module. اثر آن معمولاً در تغییر Cross-team و Incident گسترده دیده می‌شود.

بدهی کد

تکرار، پیچیدگی، Naming مبهم، Function بزرگ، Side Effect پنهان یا Dead Code. Metric استاتیک می‌تواند سرنخ بدهد، اما Context و نرخ تغییر مهم‌اند.

بدهی تست

Coverage پایین به‌تنهایی تعریف کافی نیست. تست کند، Flaky، وابسته به محیط، بدون Assertion یا نبود تست Journey بحرانی نیز بدهی است.

بدهی داده

Schema مبهم، Migration دستی، شناسه ناسازگار، Data Quality بدون Owner، PII بدون Retention و Reportهایی با تعریف متناقض.

بدهی زیرساخت و عملیات

Server بدون Infrastructure as Code، Backup تست‌نشده، Secret دستی، Dashboard ناقص، نبود SLO، Single Point of Failure یا Runbook قدیمی.

بدهی وابستگی و Supply Chain

Runtime یا Library منقضی، Plugin بدون نگهدارنده، Lockfile نامنظم، SBOM ناقص و Build غیرقابل تکرار. این بدهی می‌تواند سریع به ریسک امنیتی تبدیل شود.

بدهی UX و دسترس‌پذیری

Component ناسازگار، Flow پیچیده، Copy موقت، Contrast ضعیف و Navigation غیرقابل استفاده با Keyboard. این بدهی با افزودن صفحه تکثیر می‌شود.

بدهی دانش و فرایند

دانش در ذهن یک نفر، ADR نداشتن، Onboarding شفاهی، Ownership مبهم و Approvalهایی که ارزش اضافه نمی‌کنند.

بدهی فنی چگونه ایجاد می‌شود؟

  • فشار زمان بدون کاهش Scope؛
  • فرضیه محصول که به Production دائمی تبدیل می‌شود؛
  • تغییر Scale یا Requirement؛
  • نبود مهارت یا Review؛
  • Dependency و Runtime در حال تغییر؛
  • Ownership شکسته بین تیم‌ها؛
  • پاداش فقط برای Feature جدید؛
  • Incidentهای مکرر و Patchهای موقت؛
  • خرید ابزار بدون برنامه Exit؛
  • کد تولیدشده با AI بدون Verify و تست.

هر Debt نتیجه «برنامه‌نویس بد» نیست. Incentive، ساختار تیم و تصمیم کسب‌وکار اغلب علت سیستماتیک‌اند.

نشانه‌های بهره بالای بدهی

  • Feature مشابه هر بار بیشتر طول می‌کشد.
  • فایل‌ها یا سرویس‌هایی که همه از تغییرشان می‌ترسند.
  • Hotfix و Rollback تکراری.
  • تست Flaky که تیم نادیده می‌گیرد.
  • Deploy وابسته به یک نفر یا ساعت خاص.
  • Incident با علت تکراری.
  • Upgradeهایی که چند فصل عقب می‌افتند.
  • Onboarding طولانی و سؤال‌های تکراری.
  • کار دستی برای Sync داده و گزارش.
  • زمان زیاد برای Rework و Context Switching.

چرا یک «امتیاز کیفیت» کافی نیست؟

ابزار Static Analysis، Coverage یا Vulnerability Scanner مفید است، اما عدد واحد نمی‌گوید کدام Debt برای کسب‌وکار مهم‌تر است. کد پیچیده‌ای که سال‌ها تغییر نمی‌کند ممکن است بهره کمی داشته باشد؛ Module متوسطی که هر هفته تغییر می‌کند و Checkout را می‌شکند بهره بالایی دارد.

سه بعد را ترکیب کنید:

  • Structure: پیچیدگی، Dependency، Coverage، EOL؛
  • Flow: زمان تغییر، Review، Rework، انتظار؛
  • Outcome: Incident، Latency، Churn، هزینه و ریسک.

Technical Debt Register چیست؟

Register فهرستی کوتاه و تصمیم‌پذیر از Debtهای مهم است، نه Dump همه هشدارهای Linter. هر Item باید این فیلدها را داشته باشد:

فیلدسؤال
Title/Areaکدام Capability یا Component؟
Evidenceچه Incident، Delay یا Metric داریم؟
Interestهر ماه/تغییر چه هزینه‌ای می‌دهیم؟
Riskاحتمال و پیامد چیست؟
Principalدامنه و عدم قطعیت اصلاح؟
Ownerچه تیمی تصمیم و پیگیری می‌کند؟
MitigationContain، Refactor، Replace یا Accept؟
Triggerچه زمانی اولویت بالا می‌رود؟
Review dateچه زمانی فرض‌ها بازبینی شوند؟

Itemهایی مانند «کد بد است» قابل اقدام نیستند. بنویسید «تغییر Pricing در چهار Module تکرار می‌شود؛ سه Regression در شش Release اخیر؛ هدف: یک Policy Service و Contract Test».

چطور Debt را کشف کنیم؟

از Incident

Postmortem فقط Root Cause فوری را ثبت نکند. عامل‌هایی مانند تست ناکافی، Coupling، Alert ناقص و Deploy دردناک را به Register وصل کنید.

از Value Stream

مسیر Idea تا Production را رسم و زمان کار/انتظار را جدا کنید. صف Review، محیط Test و Approval دستی می‌توانند بهره بدهی فرایندی باشند.

از Hotspot

فایل/Module با Change Frequency بالا و Complexity بالا معمولاً Candidate بهتری از کد پیچیده اما ثابت است. Git History را با Incident و Ownership ترکیب کنید.

از Dependency

Runtime، Plugin، Image، Package و Service ثالث را با نسخه، EOL، CVE، License و Owner فهرست کنید. Upgrade را قبل از پایان پشتیبانی برنامه‌ریزی کنید.

از تیم و پشتیبانی

مصاحبه کوتاه: «کدام تغییر ساده نیست؟ کجا بیشترین انتظار داریم؟ از کدام Release می‌ترسیم؟» پاسخ‌ها را با شواهد Validate کنید.

روش اولویت‌بندی بدهی فنی

یک Score ساده می‌تواند گفتگو را ساختار دهد:

Priority ≈ Interest Frequency × Business Impact × Risk Urgency ÷ Effort

این فرمول حسابداری دقیق نیست. هدف آشکارکردن فرض‌هاست. امتیاز ۱ تا ۵ برای هر بعد کافی است، به شرط اینکه Evidence و Owner داشته باشد.

Interest Frequency

این Component چند بار تغییر، Debug یا Deploy می‌شود؟ بدهی در مسیر پرتکرار معمولاً زودتر بهره می‌گیرد.

Business Impact

اثر روی درآمد، مشتری، SLA، امنیت، انطباق و سرعت تیم چیست؟ Impact را به Outcome وصل کنید.

Risk Urgency

آیا EOL یا Deadline نزدیک است؟ Exploit فعال، Vendor Shutdown یا ظرفیت پر می‌تواند فوریت را بالا ببرد.

Effort و عدم قطعیت

Estimate بازه‌ای و Spike کوتاه برای کاهش عدم قطعیت استفاده کنید. Item بزرگ را به Milestone قابل تحویل بشکنید.

چهار پاسخ به Debt

پاسخزمان مناسبمثال
Repay/Refactorبهره بالا و مسیر مهماستخراج منطق Pricing
Containاصلاح کامل فعلاً گرانFacade، Test و Rate Limit
Replaceپایه قدیمی و Principal نامتناسبStrangler Migration
Acceptبهره کم یا عمر کوتاهکد Campaign با تاریخ پایان

Accept یعنی تصمیم ثبت‌شده با Trigger بازبینی، نه فراموش‌کردن.

بودجه‌بندی؛ آیا ۲۰٪ هر Sprint درست است؟

درصد ثابت می‌تواند Conversation Starter باشد، اما قانون عمومی نیست. تیم در مهاجرت EOL یا بحران Reliability ممکن است مدتی ظرفیت بیشتری نیاز داشته باشد؛ محصول آزمایشی با عمر کوتاه کمتر. بودجه را به Risk و Outcome گره بزنید.

مدل ظرفیت پایه

ظرفیت کوچک و پایدار برای Upgrade، Refactor و تست. درصد را تیم با توجه به Backlog و Trend تعیین می‌کند و فصلی بازبینی می‌شود.

مدل Trigger-based

وقتی Change Fail Rate، Lead Time، Vulnerability SLA یا SLO از آستانه عبور کرد، ظرفیت Debt خودکار بالا می‌رود.

مدل Initiative

برای Debt بزرگ مانند Runtime Migration یک Initiative با Outcome، Milestone و Owner جدا ساخته می‌شود.

Boy Scout Rule

تغییر کوچک در همان ناحیه کمی کیفیت را بهتر می‌کند، به شرط اینکه Scope Review نشده را ناگهان بزرگ نکند.

DORA Metrics برای دیدن اثر Debt

راهنمای DORA در مدل فعلی پنج سنجه تحویل را در دو گروه Throughput و Instability ارائه می‌کند:

  • Change Lead Time؛
  • Deployment Frequency؛
  • Failed Deployment Recovery Time؛
  • Change Fail Rate؛
  • Deployment Rework Rate.

DORA هشدار می‌دهد Metric را هدف بازی‌پذیر یا ابزار مقایسه تیم‌های نامشابه نکنید. این اعداد تشخیص مستقیم بدهی نیستند؛ Trend بد می‌تواند نشانه Bottleneck باشد و باید با داده محلی بررسی شود.

متریک‌های تکمیلی Debt

حوزهمتریکتفسیر
FlowReview Wait، Build Time، Reworkاصطکاک تحویل
QualityEscaped Defect، Flaky Testاعتماد به تغییر
ReliabilitySLO، Incident، Repeat Causeبهره عملیاتی
SecurityVulnerability Age، EOL Countفوریت ریسک
ArchitectureCross-team Change، Fan-outCoupling
Developer ExperienceOnboarding، Task Successبهره دانش/ابزار
CostCloud Unit Cost، Manual Hoursبهره مالی

کسب‌وکار را چگونه قانع کنیم؟

نگویید «کد باید تمیز شود». Debt را به تصمیم ترجمه کنید:

  • «تغییر قیمت اکنون در چهار محل و متوسط سه روز طول می‌کشد.»
  • «سه Incident اخیر علت مشترک Connection Pool داشته‌اند.»
  • «Runtime در تاریخ مشخص از پشتیبانی خارج می‌شود.»
  • «هر Release دو ساعت عملیات دستی و ریسک Rollback دارد.»
  • «این Plugin مانع Upgrade PHP و Patch امنیتی است.»

Proposal باید Baseline، Outcome، گزینه‌ها، هزینه فرصت، Milestone و معیار توقف داشته باشد.

یک Business Case نمونه

بخشنمونه
ProblemDeploy دستی ۹۰ دقیقه و وابسته به دو نفر
Evidenceچهار خطای Config در ۱۰ Release
ImpactDowntime، شب‌کاری و تأخیر Feature
Option ARunbook و Checklist
Option BPipeline، Artifact و Rollback
Milestoneیک سرویس و Canary
SuccessDeploy تکرارپذیر و کاهش Recovery

گزینه A می‌تواند کنترل جبرانی سریع و B بازپرداخت Principal باشد.

Refactor یا Rewrite؟

Rewrite جذاب است چون محدودیت گذشته را ظاهراً حذف می‌کند، اما Knowledge، Edge Case و Migration Data را دوباره می‌سازد. پیش‌فرض امن‌تر، تغییر تدریجی است مگر شواهد خلاف آن باشد.

نشانه‌های Refactor تدریجی

  • سیستم ارزش و Traffic واقعی دارد.
  • مرز قابل استخراج وجود دارد.
  • تست Characterization قابل ساخت است.
  • Migration هم‌زمان با Feature ممکن است.
  • ریسک Big Bang زیاد است.

نشانه‌های Replace

  • Runtime/Platform متوقف و Patch ناممکن؛
  • معماری با Requirement جدید ناسازگار؛
  • Principal Refactor از Replacement بیشتر؛
  • مرز داده و Cutover قابل کنترل؛
  • تیم توان عملیات دو سیستم را دارد.

حتی Replacement را با Strangler، Dual Read/Write کنترل‌شده، Reconciliation و Rollback انجام دهید.

Architecture Decision Record

ADR کوتاه، دلیل Debt آگاهانه را حفظ می‌کند:

  • Context و Constraint؛
  • Decision؛
  • گزینه‌های ردشده؛
  • Trade-off؛
  • Consequence؛
  • Owner؛
  • Review/Trigger.

ADR جای Documentation سیستم نیست؛ حافظه تصمیم است. برای انتخاب‌هایی مثل GraphQL یا REST، Context مهم‌تر از ادعای «بهترین معماری» است.

CI/CD چگونه از Debt جلوگیری می‌کند؟

  • Build تکرارپذیر و Artifact تغییرناپذیر؛
  • Unit/Integration/Contract Test؛
  • Lint و Static Analysis با Baseline؛
  • Dependency و Secret Scan؛
  • Migration Test؛
  • Preview/Canary؛
  • Rollback و Feature Flag؛
  • Production Verification؛
  • Telemetry و Annotation Release.

Quality Gate را ناگهان روی هزاران هشدار Legacy اجباری نکنید. Baseline بدهی موجود و Policy «عدم بدترشدن» بسازید، سپس بخش‌های پرریسک را کم کنید. برای طراحی Pipeline، راهنمای CI/CD امن را ببینید.

امنیت و بدهی فنی

بدهی امنیتی را فقط با CVSS مرتب نکنید. Exposure، Exploitability، داده، Control جبرانی و Business Criticality را لحاظ کنید. Vulnerability شناخته‌شده در Component اینترنتی اولویت متفاوتی از Library تست داخلی دارد.

NIST Secure Software Development Framework فعالیت‌های توسعه امن را با نیاز مأموریت، تحمل ریسک و منابع هم‌راستا می‌کند و بر ثبت Requirement، Risk و Design Decision تأکید دارد.

برای کنترل Application، راهنمای SQL Injection و XSS را مطالعه کنید.

مدیریت Dependency

  • Inventory و SBOM برای Componentهای مهم؛
  • Owner و Policy نسخه؛
  • تاریخ EOL Runtime/Database؛
  • Renovation Bot با Test و Batch کوچک؛
  • تفکیک Patch، Minor و Major؛
  • License و Provenance؛
  • Artifact Pinning و Verification؛
  • Rollback Plan.

Automation بدون تست فقط PR تولید می‌کند. Upgrade Cadence منظم Principal را کوچک نگه می‌دارد.

بدهی فنی در وردپرس

نمونه‌های رایج:

  • Pluginهای هم‌پوشان و بدون نگهداری؛
  • ویرایش مستقیم Parent Theme؛
  • Snippet ناشناس در functions.php؛
  • Shortcode قفل‌شده به Page Builder؛
  • Database Option autoload بزرگ؛
  • Cron بدون مشاهده‌پذیری؛
  • Cache لایه‌ای بدون Runbook Purge؛
  • PHP قدیمی به‌دلیل Plugin ناسازگار؛
  • Backup بدون Restore Test؛
  • Staging با داده واقعی و دسترسی ضعیف.

برای ارزیابی ریسک اکوسیستم، هزینه‌های پنهان قالب و افزونه رایگان و برای قواعد Server، مدیریت امن .htaccess را ببینید.

بدهی عملکرد و مقیاس

بهینه‌سازی زودهنگام نیز Debt می‌سازد، اما نداشتن Baseline و Load Test در مسیر رشد ریسک دارد. پیش از کمپین:

  • Capacity و Bottleneck را اندازه بگیرید.
  • Query و Cache Hit را مشاهده کنید.
  • SLO و Error Budget داشته باشید.
  • Load Test با Scenario واقعی اجرا کنید.
  • Queue، Backpressure و Degradation را تست کنید.
  • Runbook و Owner Incident را مشخص کنید.

برای برنامه عملی، چک‌لیست جلوگیری از قطع سایت در کمپین را استفاده کنید.

بدهی ناشی از AI-generated code

AI می‌تواند Boilerplate را سریع بسازد، اما Context ناقص، Dependency خیالی، کد تکراری و Test ظاهری نیز تولید کند. Guardrail:

  • مالک انسانی برای هر Merge؛
  • Threat Model و Data Handling روشن؛
  • تست رفتار، نه فقط Snapshot؛
  • Dependency و License Verification؛
  • کد کم‌حجم و Reviewable؛
  • ثبت بخش‌های Generated در صورت نیاز؛
  • عدم ارسال Secret/کد حساس به ابزار نامجاز؛
  • اندازه‌گیری Rework پس از Merge.

تعداد Token یا خط کد تولیدشده KPI بهره‌وری نیست. Outcome تحویل و کیفیت را بسنجید.

فرهنگ تیم و بدهی فنی

  • Debt را ابزار سرزنش نکنید.
  • Product و Engineering مالک مشترک Trade-off باشند.
  • Refactor موفق را با Outcome نشان دهید.
  • Postmortem بدون سرزنش برگزار کنید.
  • زمان نگهداری را در Planning پنهان نکنید.
  • Ownership و Documentation در Definition of Done باشد.
  • Debt Item بدون Evidence را Challenge کنید.

وقتی تیم مجبور است Debt را به‌صورت «Feature جعلی» پنهان کند، Governance مشکل دارد.

نقشه راه ۹۰روزه مدیریت بدهی

روز ۱ تا ۱۵: Baseline

  • سه Service/Journey بحرانی را انتخاب کنید.
  • DORA، Incident، Vulnerability و Flow را Baseline کنید.
  • مصاحبه Hotspot با تیم انجام دهید.
  • Register با حداکثر ۱۰ Item مهم بسازید.

روز ۱۶ تا ۳۰: اولویت و کنترل

  • Interest، Impact، Urgency و Effort را امتیاز دهید.
  • Owner و Trigger تعیین کنید.
  • برای Debt بحرانی کنترل جبرانی فوری بسازید.
  • یک Quick Win و یک Structural Item انتخاب کنید.

روز ۳۱ تا ۶۰: بازپرداخت مرحله‌ای

  • Characterization/Contract Test بسازید.
  • تغییر را به Slice کوچک بشکنید.
  • Canary و Rollback اجرا کنید.
  • Metric و Incident را بعد از هر Slice مقایسه کنید.

روز ۶۱ تا ۹۰: حاکمیت

  • Debt Review ماهانه یا فصلی تثبیت کنید.
  • Budget Model و Triggerها را رسمی کنید.
  • ADR، EOL Calendar و Dependency Policy اضافه کنید.
  • Item بسته‌شده را با Outcome گزارش کنید.

Definition of Done برای جلوگیری از Debt جدید

  • Acceptance Criteria و Edge Case روشن؛
  • تست متناسب با ریسک؛
  • امنیت و Authorization Review؛
  • Migration و Rollback؛
  • Telemetry و Alert؛
  • Runbook تغییرکرده؛
  • Accessibility برای UI؛
  • Dependency و License ثبت؛
  • ADR برای Trade-off مهم؛
  • Debt آگاهانه با Owner و Review Date.

برای واردکردن این کنترل‌ها از شروع پروژه، مراحل طراحی سایت حرفه‌ای را ببینید.

اشتباه‌های رایج مدیریت بدهی فنی

  • یک عدد بی‌منبع را قانون می‌کنند: ۲۰٪ ظرفیت برای همه شرایط تجویز می‌شود.
  • همه هشدارها را Debt می‌نامند: Register غیرقابل استفاده می‌شود.
  • فقط Principal را Estimate می‌کنند: Interest و تکرار تغییر دیده نمی‌شود.
  • Rewrite را راه پاک می‌دانند: Knowledge و Migration فراموش می‌شود.
  • Coverage را هدف می‌کنند: تست کم‌ارزش برای بالا بردن درصد ساخته می‌شود.
  • Debt را کار تیم فنی می‌دانند: Trade-off کسب‌وکار پنهان می‌ماند.
  • امنیت را تا Audit عقب می‌اندازند: EOL و CVE جمع می‌شود.
  • Metric تیم‌ها را مقایسه می‌کنند: Context متفاوت نادیده گرفته می‌شود.
  • Quick Win بدون Structural Fix: علت تکرار باقی می‌ماند.
  • Item بدون Owner: Backlog به قبرستان تبدیل می‌شود.

چک‌لیست جلسه Debt Review

  • کدام Debt در این دوره بهره واقعی ایجاد کرد؟
  • کدام Incident یا Delay به Register وصل شد؟
  • آیا Urgency یا EOL تغییر کرده است؟
  • Control جبرانی هنوز کار می‌کند؟
  • Principal کوچک‌تر یا بزرگ‌تر شده است؟
  • کدام Item دیگر ارزش نگهداری ندارد؟
  • Outcome Item تکمیل‌شده چه بود؟
  • کدام Debt جدید آگاهانه پذیرفته شد؟
  • ظرفیت دوره بعد بر چه شواهدی تنظیم می‌شود؟

سؤالات متداول بدهی فنی

بدهی فنی را چگونه اندازه بگیریم؟

یک عدد کامل وجود ندارد. Structure، Flow و Outcome را ترکیب کنید: Complexity/Dependency، زمان تغییر و Rework، سپس Incident، SLO و هزینه. Trend یک Service از مقایسه تیم‌های نامشابه مفیدتر است.

چند درصد Sprint را به بدهی فنی بدهیم؟

درصد جهانی وجود ندارد. ظرفیت پایه می‌تواند مفید باشد، اما Risk، EOL، SLO، Roadmap و Trend تحویل باید آن را تعیین کنند. برای مهاجرت بزرگ Initiative جدا بسازید.

چه زمانی Rewrite کنیم؟

وقتی Platform متوقف، معماری با Requirement اصلی ناسازگار و Migration قابل کنترل باشد. ابتدا گزینه Refactor/Strangler را مقایسه و Data Migration، Dual Run و Rollback را طراحی کنید.

آیا Coverage بالا یعنی بدهی کم؟

خیر. Coverage می‌تواند تست ضعیف یا Flaky را پنهان کند. Journey بحرانی، Mutation/Contract Test، زمان اجرا و توان کشف Regression مهم‌ترند.

اولین اقدام برای مدیریت Debt چیست؟

سه مسیر بحرانی را انتخاب و حداکثر ۱۰ Debt Item با Evidence، Interest، Owner و Trigger ثبت کنید. یک کنترل فوری و یک اصلاح ساختاری کوچک را تا Outcome کامل کنید.

جمع‌بندی: بدهی را به تصمیم تبدیل کنید

بدهی فنی زمانی خطرناک می‌شود که نامرئی و بی‌مالک باشد. Register کوتاه، شواهد بهره، اولویت مبتنی بر Impact و تغییر مرحله‌ای، گفت‌وگوی فنی را به تصمیم کسب‌وکار تبدیل می‌کند. درصد ثابت، امتیاز ابزار یا Rewrite بزرگ جای این حاکمیت را نمی‌گیرد.

اگر برای ممیزی معماری، ساخت Debt Register، برنامه Upgrade یا طراحی Business Case نیاز به کمک دارید، از طریق درخواست مشاوره مایندیو Stack، Roadmap و مهم‌ترین نقاط اصطکاک را ارسال کنید.

مطالب مرتبط

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *