# Task estimation and prioritization - What years in software taught me

ক্যারিয়ারের শুরুর দিকে আমি অনেক বেশি জারি খাইতাম টাস্ক ইস্টিমেশন করা নিয়ে। ফ্রেশার হিসাবে কেমনে টাস্ক ইস্টিমেট করতে হয় জানতাম না, কারণ কলেজ বা ইউনিভার্সিটিতে এই জিনিসগুলা নিয়ে কেউ কিছু শিখায় নাই। টাস্ক ইস্টিমেট করতে গেলে হয় ওভার ইস্টিমেট করে ফেলতাম নাহলে অনেক আনেক্সপেক্টড সারপ্রাইজ নিয়ে ভালোভাবে স্টাডি করা হত না। যেটার জন্য সময়ের মধ্যে কাজ শেষ করতে পারি নাই। সফটওয়্যার ইন্ডাস্ট্রিতে কাজ করতেছি আজ অনেকগুলা বছর হয়ে গেল, এর মধ্যে অনেক কিছু এক্সপেরিয়েন্স করছি অনেক কিছু শিখা হইছে। আজকে কিছু পরামর্শ শেয়ার করব, কিভাবে তুমি বেটার ওয়েতে টাস্ক ইস্টিমেট করতে পারো, কিভাবে টাস্ক প্রায়োরাটাইজ করবা এবং ইনক্রিমেন্টাল ডেভেলপমেন্ট করা যায়।

### টাস্ক ইস্টিমেশন, প্রডাক্ট ডেডলাইন

তুমি তোমার রোলে যত ভাল করতে চাইবা তোমাকে টাস্ক ইস্টিমেশন তত ভালো হওয়া লাগবে। কারণ তোমার ফিচার কমপ্লিট করার জন্য প্রোডাক্ট ম্যানেজার কে একটা প্রবাবল ডেডলাইন  দেওয়া লাগবে, সে  সেই ডেডলাইন ক্লায়েন্টের সাথে কমিউনিকেট করবে। সেলস টিম ডেডলাইন অনুযায়ী ফিচার প্রি-সেল করবে। সফটওয়্যার ইঞ্জিনিয়ারিং এ একেবারে পারফেক্ট টাস্ক ইস্টিমেশন সম্বব না। সবসময় কোন না কোন আনেক্সপেক্টড সারপ্রাইজ/রিকোয়ারমেন্ট থাকবে বা মাঝ পথে রিকোয়ারমেন্ট সম্পূর্ণ চেঞ্জ হয়ে যেতে পারে। যেই জিনিসটা দরকার তোমাকে একটা রিজনেবল ইস্টিমেশন করতে শিখা।

যে কাজটা সবাই করে, একটা টাস্কে কত ঘণ্টা লাগবে সেই হিসাবে টাস্ক ইস্টিমেট করা। ট্রাস্ট মি সফটওয়্যার ইঞ্জিনিয়ারিং এ এইভাবে ঘণ্টা বেধে টাস্ক ইস্টিমেট করা সম্ভব না। আমি নিজেও আগে এইভাবে ঘণ্টা বেধে টাস্ক ইস্টিমেট করতাম বাস্তবে এইটা একটা বুলশিট আইডিয়া।

যেটা সব চেয়ে ইফেক্টিভ সেটা হচ্ছে একটু এবসস্ট্রাক ওয়ে টে ইস্টিমেট করা লাইক টিশার্ট সাইজিং অথবা পয়েন্টিং সিস্টেম। টিশার্ট  এর মধ্যে কমন কিছু সাইজিং - small, medium, large, এই মেজারমেন্ট গুলা দিয়ে আমরা টাস্ক ইস্টিমেট করতে পারি। Small সাইজের কাজ ১-৩ দিন লাগতে পারে। এর বেশি হইলে এইটা মিডিয়াম সাইজের কাজ, যেটা ৩-৫ দিন মানে এক সম্পাহ লাগতে পারে। এর বেশি হইলে লার্জ সাইজ, লার্জ সাইজের কাজ সর্বোচ্ছ ২ সপ্তাহ হতে পারে। প্রতিটা ফিচার কে তুমি ছোট ছোট টাস্কে ভেঙ্গে নিতে পারো,  টাস্ক গুলার মধ্যে এক্সসেপ্টন্স ক্রাইটেরিয়া লেখা থাকবে যে এই টাস্ক কমপ্লিট করার মাধ্যমে কি গোল অ্যাচিভ হবে। প্রতিটা টাস্কের ইস্টিমেশন একসাথে যোগ করলে তুমি টোটাল একটা ইস্টিমেশন পাবা।

এইখানেই শেষ না, ফিচার ডেডলাইন দেয়ার জন্য তোমাকে আরও কিছু ক্যালকুলেশন করা লাগবে। তোমার টিম ক্যাপাসিটি কি রকম, তোমার টিমে কয়জন মেম্বার আছে, তারা উইকলি কতটুকু কনট্রিবিউশন করতে পারবে, সবকিছু হিসাব করা লাগবে। যেমন টিম-লিডরা সাধারণত ৪০-৫০% এর বেশি সময় পায় না কোড করার জন্য, কারণ ওদের টিম ম্যানেজমেন্ট, টাস্ক ডেলিগেশন, স্টেক হোল্ডার/ক্রসটিম কমিউনিকেশন নিয়ে অনেক ব্যাস্ত থাকা লাগে। তারপর ধরো উইক্লি পাঁচদিনের মধ্যে প্রায় তোমাদের একদিন মিটিং এ চলে যাইতে পারে। এরপর ধরো তোমাকে কিছু খুব গুরুত্বপূর্ণ ম্যাচুরিটি আইটেম পিক করা লাগতে পারে। যেমনঃ

* Node.js লেটেস্ট ভার্সনে আপগ্রেড করবা
    
* ডাটাবেসজ ইন্ডেক্সিং করবা যেটার জন্য কুয়েরি পারফর্মেন্স ইম্প্যাক্টেড হইতেছে
    
* সিকিউরিটি ভালনারেবিলিটিস এর জন্য প্যাকেজ আপগ্রেড করা লাগবে
    
* বা কোড রিফেকটর করবা
    

এর মধ্যে টিমমেটদের ভেকেশন শিডিউল মাথায় রাখা লাগবে। আন-একপেক্টেড সারপ্রাইজ এর জন্য কিছু বাফার সময় এক্সটা রাখা লাগবে, যেমন তোমার কোন টিমমেট অসুস্থ হয়ে যেতে পারে। বা কোন প্রডাকশন ইনসিডেন্ট হইছে সেইখানে তোমার টিমকে অনেক টাইম ইনভেস্ট করা লাগতে পারে। ফিচার রিকোয়ারমেন্ট চেঞ্জ হয়ে যেতে পারে, এজাইল ডেভেলপমেন্টে এইটা খুব স্বাভাবিক ব্যাপার। রিকোয়ারমেন্ট চেঞ্জ হইলে তোমাকে আবার ডেড লাইন রিভিউ বা রি-ইস্টিমেট করা লাগতে পারে। সময় চেঞ্জ হইলে এইটা সবসময় আগেই কমিউনিকেট করবা।

### টাস্ক প্রায়োরাটাইজেশন এবং ইনক্রিমেন্টাল ডেভেলপমেন্ট

তোমার সিনিয়রিটির উপর বেজ করে তোমাকে আরেকটা জিনিস শিখা লাগবে সেটা হইছে ফিচার/টাস্ক প্রায়োরাটাইজ করতে শিখা। প্রডাক্ট টিম চাইবে তারা যা চায় তুমি সবকিছু বানিয়ে ফেলো। কিন্তু এইটা সবসময় প্রাক্টিক্যাল না, সময় বা রিসোর্সের অভাবে। তোমাকে একটা ফিচার থেকে ফাংশনাল নিডস আর ম্যাচুরিটি আলাদা করা শিখা লাগবে। ধরো প্রডাক্ট টিম তোমাকে অনেক ফ্যান্সি এনিমেশন সহ একটা লগইন পেজ বানাইতে বলল। এইখানে লোকজন যাতে লগইন করতে পারে সেজন্য লগইন ফর্ম বানানো লাগবে এইটা হইছে ফাংশনাল নিডস, আর ফ্যান্সি এনিমেশন যেটা পরে করলেও কোন ক্ষতি নাই সেইটা হচ্ছে ম্যাচুরিটি আইটেম। এইভাবে ফিচার ডেভলপ করলে সুবিধা হচ্ছে তোমার ফাংশনাল জিনিসপত্র দ্রুত প্রডাকশনে পাঠাইতে পারবা, ইউজার টেস্টিং শেষে তুমি দ্রুত ফিডব্যাক পাবা এবং বাগ ফিক্স করে ফিচার স্টাবল করতে পারবা। এইখানে লগইন পেজ আমি জাস্ট ছোট্ট একটা উদাহারন হিসাবে দিছি। কাজ করতে গেলে তোমার জাজমেন্ট ব্যাবহার করে এই জিনিসগুলা কে আলাদা করে ফেলতে হবে। আরেকটা ইম্পরট্যান্ট জিনিস হচ্ছে তোমার ফিচারকে যতটা সম্ভব ছোট ছোট মাইলস্টোনে ভেঙ্গে ইনক্রিমেন্টাল ডেভেলপ করবা। যত দ্রুত প্রডাকশনে যাবা তত দ্রুত ফিডব্যাক পাবা, যেটা ফিচার স্টাবল/ইউজার টেস্টিং এর জন্য অনেকবেশি ইম্পরট্যান্ট।

আরেকটা জিনিসে তোমাকে এক্সপার্ট হওয়া লাগবে সেটা হচ্ছে যে কোন ফিচার বা কাজকে কে যতটা সম্ভব ছোট ছোট টাস্কে ভেঙ্গে ফেলা। যাতে ২-৪ ঘণ্টা বা একদিনে টাস্কটা কমপ্লিট করে ফেলা যায়। এতে সুবিধা হচ্ছে PR সাইজ ছোট হবে, ছোট PR রিভিউ করা অনেক ইজি। তুমি দিনে দিনেই মার্জ করে প্রডাকশনে পাঠিয়ে দিলা। নতুন জিনিসপত্র পুরা ফিচার রিলিজ করার আগ পর্যন্ত ফিচার ফ্লাগের পিছনে রাখতে পারো। তাহলে এই ইনক্রিমেন্টাল চেঞ্জ গুলা তোমার কাছে বা তুমি যাদের জন্য এনেইবল করবা তারা টেস্ট করতে পারবে। এখন কেমনে তুমি ছোট ছোট টাস্ক বানাইতে পারো তার একটা উদাহারন দেই। ধরো তুমি একটা নতুন UI সেকশন বানাবা যেটাতে ফর্ম ফ্লিল্ড আছে, API integration থাকবে। যেটা করতে পারো, প্রথম টাস্কে তুমি জাস্ট UI সেকশনটা ভিজিবল করতে পারো সেটাতে ধরো টাইটেল, ডেসক্রিপশন থাকবে। এই প্রথম টাস্কটা কমপ্লিট করা শেষ হলে ফিচার ফ্লাগের পিছনে রেখে প্রডাকশনে পাঠিয়ে দাও, তারপর দেখো সব কিছু ঠিকঠাক আছে কিনা। তারপরে UI তে ফর্ম অ্যাড করো, এর পরের টাস্কে API ইনট্রিগেট করতে পারো। এইভাবে করলে সবকিছু অনেক সিম্পল হয়ে যাবে, ইনক্রিমেন্টালি ডেভেলপ করতে পারবা এবং কাজ শেষে হলে রেগুলার প্রডাকশনে চলে যাবে। হয়ত সব টাস্ক এইভাবে ভাঙ্গা সম্ভব না, সেটার জন্য তোমার বেস্ট জাজমেন্ট ব্যাবহার করো।

তোমার কোন প্রশ্ন, অভিজ্ঞতা, মতামত বা পরামর্শ থাকলে কমেন্ট জানাতে পারো।
