جایی که لیست تسک ساده دیگر کافی نیست

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

ده نوع فیلد، دو تای آن‌ها خودشان محاسبه می‌شوند

فیلد سفارشی WKFGo انواع معمول را پوشش می‌دهد — متن، عدد، URL، تاریخ، دراپ‌داون، چندانتخابی، چک‌باکس، کاربر — به‌اضافهٔ دو نوع که اصلاً ورودی دستی نمی‌گیرند:

Rollup یک فیلد عددی را روی مجموعه‌ای از تسک‌ها جمع می‌زند: sum، avg، min، max یا count، روی فیلدهای عددی داخلی مثل story_points، progress یا estimated_time. یک rollup را روی زیرتسک‌های یک اپیک بگذارید و خودش با تغییر آن تسک‌ها دوباره محاسبه می‌شود — کسی لازم نیست یادش بماند به‌روزش کند.

فرمول روی فیلدهای عددی خود تسک حساب می‌کند: عدد ثابت، + - * /، پرانتز، منفی یک‌طرفه، و شناسه‌هایی که به فیلد عددی شناخته‌شده (شامل فیلدهای سفارشی دیگر) اشاره می‌کنند. estimated_time * 1.15 برای برآورد با حاشیهٔ اطمینان، یا progress / 100 * story_points برای امتیاز انجام‌شده، از همین جنس کاربردند.

چرا ارزیاب فرمول مهم‌تر از چیزی است که به‌نظر می‌رسد

راه وسوسه‌انگیز ساخت «فیلد فرمول» این است که عبارت را مستقیم از eval همان زبان برنامه‌نویسی رد کنید. WKFGo عمداً این کار را نمی‌کند — ارزیاب فرمول یک پارسر recursive-descent کوچک و دست‌نویس است که فقط عدد ثابت، چهار عملگر پایه، پرانتز، و شناسه‌هایی که به فیلد عددی واقعی روی تسک برمی‌گردند را می‌فهمد. هر چیز دیگر — فراخوانی تابع، شناسهٔ ناشناخته، توکن اضافه، نحو نادرست — قبل از ذخیرهٔ فیلد با خطای اعتبارسنجی رد می‌شود. هیچ سطح اجرای کدی برای فرار عبارت فرمول وجود ندارد، چون ارزیاب از اول برای اجرای کد ساخته نشده.

این یک مصالحهٔ آگاهانه است: نمی‌توانید IF() یا دستکاری رشته در فیلد فرمول WKFGo بنویسید. در عوض فیلد فرمولی می‌گیرید که برای هر کاربری که مجاز به ویرایش تنظیمات پروژه است امن است، نه فقط ادمین‌هایی که به چیزی نزدیک به کنسول اسکریپت اعتماد شده‌اند.

کجا واقعاً استفاده می‌شود

راه‌اندازی

در تنظیمات پروژه → فیلدهای سفارشی، فیلدی اضافه کنید، نامش را بگذارید و نوع را انتخاب کنید. برای rollup، فیلد عددی برای جمع و روش تجمیع را انتخاب کنید. برای فرمول، عبارت را با نام نرمال‌شدهٔ فیلدهای عددی موجود بنویسید — همان نامی که به فیلد داده‌اید به حروف کوچک تبدیل می‌شود و هر بخشی جز حرف/عدد لاتین به زیرخط تبدیل می‌شود؛ یعنی فیلدی به نام «Day Rate» در عبارت day_rate می‌شود. نام مرجع جدایی وجود ندارد — همان نام فیلد هم روی کارت نشان داده می‌شود و هم چیزی است که فرمول به آن ارجاع می‌دهد. یک نتیجهٔ عملی: فیلد عددی که نامش کاملاً فارسی باشد به چیز قابل‌استفاده‌ای نرمال نمی‌شود، پس هر فیلدی که قرار است از فرمول ارجاع داده شود باید حداقل بخشی از نامش با حروف لاتین باشد — حتی روی بوردی که بقیه‌اش فارسی است. فیلدهای اجباری و فهرست گزینه‌های دراپ‌داون/چندانتخابی فرقی نمی‌کند فیلد دستی باشد یا محاسبه‌شونده. فیلدهای محاسبه‌شونده هرجا فیلد سفارشی معمولی نشان داده می‌شود ظاهر می‌شوند — روی کارت تسک و در خروجی — فقط فقط‌خواندنی‌اند، چون چیزی برای تایپ‌کردن ندارند.

سوالات متداول

آیا فرمول می‌تواند به فیلد فرمول دیگری اشاره کند؟ می‌تواند به هر فیلد عددی شناخته‌شده اشاره کند، شامل فیلدهای سفارشی دیگر، تا وقتی نتیجه یک عدد باشد — اما ارجاع دایره‌ای (فرمولی که مستقیم یا از طریق فرمول دیگر به خودش وابسته باشد) در اعتبارسنجی رد می‌شود، نه اینکه در حلقه بیفتد.

اگر تسک‌های زیربنایی حذف شوند چه اتفاقی برای rollup می‌افتد؟ rollup از هر تسکی که الان با محدودهٔ آن تطبیق دارد دوباره محاسبه می‌شود — تسک‌های حذف‌شده (شامل حذف نرم در سطل بازیافت) خودکار از جمع بیرون می‌روند.

سقفی برای تعداد فیلد سفارشی هر پروژه هست؟ سقف سختی نیست، اما هر فیلد یک ستون به خروجی تسک‌ها و یک ردیف به صفحهٔ تنظیمات اضافه می‌کند — بعد از حدود دو دوجین، قبل از اینکه مشکل کارایی دیتابیس شود، برای انسان مشکل نگهداری می‌شود.

می‌شود بعد از این‌که تسک‌ها داده دارند، نوع فیلد را عوض کرد؟ تغییر نوع ممکن است اما بدون افت داده نیست — مثلاً از متن به عدد، فقط مقادیری که تمیز به عدد تبدیل شوند نگه داشته می‌شوند. تغییر نوع را یک مهاجرت یک‌طرفه در نظر بگیرید، نه یک سوییچ امن.


آماده‌اید عددهایی را ردیابی کنید که بورد به‌طور پیش‌فرض نشان نمی‌دهد؟