এই পর্বে যা শিখবেন
- Lean-এর জন্ম, software-এর সাতটি অপচয় আর value stream mapping
- Kanban method-এর ছয়টি চর্চা, board-এর কলাম, swimlane, done-এর শর্ত আর class of service
- Lead time, cycle time, throughput, WIP, work item age আর cumulative flow diagram — নিখুঁত সংজ্ঞাসহ
- Little-এর সূত্র দিয়ে হিসাব, তার শর্ত, আর WIP কমালে cycle time কেন কমে
- Scrum, Kanban আর Scrumban-এর তুলনা, আর 5 whys দিয়ে একটি outage বিশ্লেষণ
১ · কারখানা থেকে কোডে — lean-এর জন্ম
একটি পরিচিত দৃশ্য দিয়ে শুরু করি। একটি কাল্পনিক অনলাইন বাজার অ্যাপের দলে পাঁচজন developer. Sprint-এর মাঝামাঝি দেখা গেল, board-এ “চলছে” কলামে ১৮টি কাজ! প্রত্যেকে তিন-চারটি কাজ একসাথে ধরেছেন। কোনোটাই শেষ হচ্ছে না। Product owner জিজ্ঞেস করলেন, “ঈদের আগে payment-এর নতুন অপশন কবে পাব?” কেউ নিশ্চিত করে বলতে পারলেন না।
সমস্যাটা পরিশ্রমের নয় — সবাই ব্যস্ত। সমস্যা flow-এর, অর্থাৎ কাজ শুরু থেকে শেষ পর্যন্ত কত মসৃণভাবে বয়ে যায়। এই পর্বে আমরা দেখব, এই সমস্যার সবচেয়ে কার্যকর সমাধানটি এসেছে একটি গাড়ির কারখানা থেকে।
ঢাকার একটি জনপ্রিয় বিরিয়ানির দোকানের কথা ভাবুন। দুপুরে ভিড়। রাঁধুনি যদি একসাথে বিশটি অর্ডারের মশলা মাখাতে শুরু করেন, প্রথম প্লেট বেরোতেই ঘণ্টা পেরোবে। অভিজ্ঞ দোকানি জানেন — একসাথে যতগুলো ডেকচি সামলানো যায়, ঠিক ততগুলোই চুলায় তুলুন। একটি নামলে তবেই পরেরটি। এতে প্রতিটি অর্ডার দ্রুত বের হয়, আর কাউন্টারে বসে থাকা অর্ডারের তালিকা দেখেই বলা যায় কার খাবার কখন আসবে। Lean আর Kanban-এর মূল চিন্তা এটুকুই।
দ্বিতীয় বিশ্বযুদ্ধের পর জাপানের Toyota কোম্পানির হাতে টাকা আর জায়গা দুটোই কম ছিল; আমেরিকার কারখানার মতো বিশাল গুদামে আগাম গাড়ির যন্ত্রাংশ জমিয়ে রাখা তাদের পক্ষে সম্ভব ছিল না। প্রকৌশলী Taiichi Ohno ও সহকর্মীরা কয়েক দশক ধরে (মোটামুটি ১৯৫০ থেকে ১৯৭০-এর দশক) গড়ে তোলেন Toyota Production System (TPS). এর দুটি স্তম্ভ:
- Just-in-time: যা দরকার, যখন দরকার, যতটুকু দরকার — তার বেশি নয়। পরের ধাপ যখন যন্ত্রাংশ চায়, তখনই আগের ধাপ বানায়। এই “চাওয়া”র সংকেত দিত একটি কাগজের কার্ড — জাপানি ভাষায় kanban (মানে মোটামুটি “সংকেত-ফলক” বা “চিহ্নের কার্ড”)।
- Jidoka: ভুল দেখা দিলেই লাইন থামানো। Toyota-র কারখানায় যেকোনো কর্মী একটি দড়ি (andon cord) টেনে লাইন থামাতে পারতেন — ভুল যেন পরের ধাপে না যায়।
আগের ধাপ নিজের ইচ্ছেমতো বানিয়ে পরের ধাপে ঠেলে দিলে সেটা push; পরের ধাপ জায়গা খালি হলে চেয়ে নিলে সেটা pull. TPS হলো একটি pull system.
“Lean” শব্দটি Toyota-র নিজের নয়। সাধারণভাবে বলা হয়, MIT-এর গবেষক John Krafcik ১৯৮৮ সালের দিকে একটি প্রবন্ধে (“Triumph of the Lean Production System”) শব্দটি জনপ্রিয় করেন। ১৯৯০ সালে Womack, Jones ও Roos-এর বই The Machine That Changed the World একে বিশ্বজুড়ে পরিচিত করে। ১৯৯৬ সালে Womack ও Jones তাঁদের Lean Thinking বইয়ে পাঁচটি নীতি দেন: value (গ্রাহক কী মূল্য দেন), value stream (মূল্য তৈরির পুরো পথ), flow (থামা ছাড়া বয়ে চলা), pull (চাহিদা অনুযায়ী টানা), আর perfection (অবিরাম উন্নতি)। Ohno-র নিজের বই Toyota Production System জাপানিতে বেরোয় ১৯৭৮ সালে, ইংরেজি অনুবাদ ১৯৮৮ সালে।
পর্ব ৫-এ (Agile আর Scrum) আপনি দেখেছেন Scrum কাজকে নির্দিষ্ট দৈর্ঘ্যের sprint-এ ভাগ করে। Lean আর Kanban অন্য দিক থেকে দেখে: সময়ের বাক্স নয়, কাজের ধারাটাই মূল। দুটো পরস্পরবিরোধী নয় — অংশ ৮-এ দেখব কীভাবে মেলানো যায়।
২ · সাতটি অপচয় — software-এ কোথায় লুকিয়ে থাকে
Ohno কারখানায় সাত রকম অপচয় (জাপানি শব্দ muda) চিহ্নিত করেছিলেন: বেশি উৎপাদন, অপেক্ষা, অপ্রয়োজনীয় পরিবহন, অতিরিক্ত প্রক্রিয়া, জমা মাল (inventory), অপ্রয়োজনীয় নড়াচড়া, আর ত্রুটি। Mary ও Tom Poppendieck ২০০৩ সালে তাঁদের বই Lean Software Development: An Agile Toolkit-এ এই চিন্তা software-এ আনেন। তাঁদের ২০০৬ সালের বই Implementing Lean Software Development-এ সাতটি অপচয়ের যে তালিকা আছে, সেটিই আজ বেশি উদ্ধৃত হয় (২০০৩-এর তালিকায় কয়েকটি নাম আলাদা ছিল, যেমন “extra processes”, “waiting”, “motion”):
| কারখানায় | Software-এ | চেনা উদাহরণ |
|---|---|---|
| জমা মাল (inventory) | Partially done work — অর্ধেক শেষ কাজ | তিন সপ্তাহ ধরে merge না হওয়া branch, test না হওয়া কোড, লেখা হয়েছে কিন্তু release হয়নি এমন feature |
| বেশি উৎপাদন | Extra features — যা কেউ চায়নি | “পরে লাগতে পারে” ভেবে বানানো report, যা কেউ কখনো খোলে না |
| অতিরিক্ত প্রক্রিয়া | Relearning — একই জিনিস আবার শেখা | আগের সিদ্ধান্তের কারণ কোথাও লেখা নেই, তাই প্রতিবার নতুন করে খুঁজে বের করা |
| পরিবহন | Handoffs — হাতবদল | Analyst → designer → developer → tester; প্রতিবার হাতবদলে জ্ঞানের একটি অংশ হারায় |
| অপেক্ষা | Delays — দেরি | Review-এর জন্য দুই দিন, test server খালি হওয়ার জন্য এক দিন, অনুমোদনের জন্য এক সপ্তাহ |
| নড়াচড়া | Task switching — কাজ বদল | একজন developer একসাথে চারটি ticket আর দুটি meeting-এর মাঝে ঘুরছেন |
| ত্রুটি | Defects — bug | Production-এ ধরা পড়া bug; যত দেরিতে ধরা পড়ে, সারাতে তত বেশি খরচ |
খেয়াল করুন, প্রথমটিই সবচেয়ে গুরুত্বপূর্ণ। কারখানায় জমা মাল চোখে দেখা যায় — গুদাম ভরে যায়। Software-এ অর্ধেক শেষ কাজ অদৃশ্য: একটি branch-এ বসে থাকা কোড কারও চোখে পড়ে না, অথচ সেটি পুরোনো হচ্ছে, অন্য কোডের সাথে conflict বাড়াচ্ছে, আর কোনো মূল্য দিচ্ছে না। পর্ব ১৭-এ trunk-based development আর পর্ব ৫৮-এ continuous integration — দুটোরই একটি বড় লক্ষ্য এই অদৃশ্য জমা কমানো।
Value stream mapping — একটি কাজের পুরো যাত্রা আঁকা
Value stream mapping (VSM) হলো একটি অনুরোধ আসা থেকে গ্রাহকের হাতে পৌঁছানো পর্যন্ত প্রতিটি ধাপ আর প্রতিটি অপেক্ষা কাগজে আঁকা। Toyota-র ভেতরে এর চর্চা পুরোনো; Mike Rother ও John Shook-এর বই Learning to See (১৯৯৮) একে কারখানার বাইরে জনপ্রিয় করে। Software-এ এর সহজ রূপ: একটি ticket-এর ইতিহাস ধরে প্রতিটি ধাপে কাজ কতক্ষণ সত্যিই হয়েছে, আর কতক্ষণ শুধু অপেক্ষা করেছে, তা লেখা।
একটি ticket-এর value stream — কাজ বনাম অপেক্ষা
Card BAZ-101: 12 active hours inside a 78-hour lead time
ছবিটি একটি অস্বস্তিকর সত্য দেখায়: developer-কে দ্রুত কোড লেখাতে চাপ দিয়ে ৬ ঘণ্টাকে ৫ ঘণ্টা করলে লাভ ১ ঘণ্টা। কিন্তু test-এর জন্য ৩০ ঘণ্টার অপেক্ষা অর্ধেক করলে লাভ ১৫ ঘণ্টা। Lean-এর চোখে উন্নতি মানে আগে অপেক্ষা খোঁজা, মানুষের গতি নয়। এই হিসাবের নাম flow efficiency; অংশ ৭-এ কোড দিয়ে হিসাব করব।
৩ · Kanban method — ছয়টি মূল চর্চা আর board
Toyota-র kanban ছিল যন্ত্রাংশের কার্ড। Software-এর Kanban method (বড় হাতের K দিয়ে লেখা হয়) মূলত David J. Anderson-এর কাজ থেকে এসেছে; ২০০০-এর দশকের মাঝামাঝি কয়েকটি software দলে তাঁর পরীক্ষা-নিরীক্ষার পর ২০১০ সালের দিকে প্রকাশিত বই Kanban: Successful Evolutionary Change for Your Technology Business একে পরিচিত করে। Anderson-এর ভাষায় এটি একটি “বিবর্তনমূলক পরিবর্তনের পদ্ধতি” — আপনার বর্তমান কাজের ধারা থেকেই শুরু, রাতারাতি সব বদলানো নয়।
সাধারণভাবে এর ছয়টি মূল চর্চা বলা হয় (বিভিন্ন সংস্করণে শব্দ একটু আলাদা):
১ · কাজ চোখে দেখানো
প্রতিটি কাজ একটি card, প্রতিটি ধাপ একটি কলাম। অদৃশ্য কাজ (অর্ধেক শেষ branch, “একটু দেখে দেবেন?” ধরনের অনুরোধ) board-এ উঠে আসে।
visualise২ · WIP সীমিত করা
প্রতিটি কলামে একসাথে কতগুলো card থাকতে পারবে, তার লিখিত সীমা। এটিই Kanban-এর প্রাণ।
limit WIP৩ · Flow পরিচালনা
মানুষ ব্যস্ত কি না নয়, card কত মসৃণভাবে এগোচ্ছে — সেটা প্রতিদিন দেখা। আটকে থাকা card আগে।
manage flow৪ · নিয়ম স্পষ্ট করা
“কখন একটি card পরের কলামে যাবে”, “জরুরি কাজ কীভাবে ঢুকবে” — সব লিখে board-এর পাশে টানানো।
explicit policies৫ · Feedback-এর চক্র
প্রতিদিনের ছোট মিটিং, নিয়মিত review আর retrospective — যাতে সমস্যা দ্রুত চোখে পড়ে।
feedback loops৬ · একসাথে উন্নতি
মাপা তথ্য দেখে ছোট পরীক্ষা, ফল দেখে আবার বদল — বিজ্ঞানের পদ্ধতিতে।
improve collaborativelyএকটি Kanban board — কলাম, WIP limit, swimlane আর done-এর শর্ত
Columns with WIP limits, an expedite swimlane, a blocked card and done criteria
Board-এর অংশগুলো একে একে:
- কলাম: আপনার দলের আসল কাজের ধাপ — বইয়ের আদর্শ ধাপ নয়। অনেক দল একটি কলামকে দুই ভাগ করে: “চলছে” আর “শেষ, পরের ধাপের অপেক্ষায়”। দুটো মিলিয়ে একটি WIP limit.
- Swimlane: আড়াআড়ি সারি — কাজের ধরন বা অগ্রাধিকার আলাদা করতে। যেমন ওপরে জরুরি কাজের সরু সারি, নিচে সাধারণ কাজ।
- Done-এর শর্ত: প্রতিটি কলামের বেরোনোর নিয়ম লেখা থাকে। Scrum-এর Definition of Done-এর মতোই, কিন্তু এখানে প্রতিটি ধাপের জন্য আলাদা।
- Blocked card: বাইরের কারণে আটকে থাকা কাজ (অন্য দলের API, গ্রাহকের উত্তর)। লাল চিহ্ন দিয়ে আলাদা করা হয়, কারণ এটাই প্রায়ই সবচেয়ে বড় অপেক্ষার উৎস।
- Class of service: কোন ধরনের কাজ কোন নিয়মে চলবে। Anderson-এর বইয়ে প্রচলিত চারটি: expedite (এখনই — যেমন production-এ payment বন্ধ), fixed date (নির্দিষ্ট তারিখের আগে — যেমন সরকারি নিয়মের সময়সীমা), standard (সাধারণ ক্রম), intangible (এখন জরুরি নয়, কিন্তু না করলে পরে বিপদ — যেমন পুরোনো library হালনাগাদ)।
Expedite lane যদি প্রতিদিন ভরা থাকে, তাহলে সেটা আর ব্যতিক্রম নয় — আপনার আসল কাজের ধারাই ভাঙা। তাই expedite lane-এর সীমা সাধারণত ১, আর কতবার ব্যবহার হলো তা মেপে retrospective-এ আলোচনা করা হয়।
৪ · Board-এ একটি card-এর যাত্রা — pull আর WIP limit
WIP limit-এর আসল কাজ বোঝা যায় যখন সেটি কাউকে থামায়। নিচের ছোট board-এ Dev কলামের সীমা ২, Review-এর সীমা ১। “পরে” চেপে দেখুন কখন একটি টান আটকে যায় আর তখন দলের মানুষ কী করেন।
| Backlog | |
| Dev (সীমা ২) | |
| Review (সীমা ১) | |
| Done | |
| ঘটনা |
- শুরু। Dev-এ A আর B — সীমা ২, তাই কলাম পূর্ণ। Review খালি (০/১)। Backlog-এ C, D, E অপেক্ষায়; ওপরের card আগে টানা হবে।
- A-র development শেষ। Review-এ জায়গা আছে, তাই reviewer A-কে টেনে নিলেন। কেউ ঠেলে দেননি — পরের ধাপ নিজে চেয়ে নিয়েছে। Dev-এ এখন শুধু B (১/২)।
- Dev-এ একটি জায়গা খালি। Developer Backlog-এর মাথা থেকে C টেনে নিলেন। Dev আবার পূর্ণ (২/২)।
- B-র কাজ শেষ, কিন্তু Review পূর্ণ। Review-এ A আছে (১/১), তাই B Dev-এই “শেষ, অপেক্ষায়” হয়ে বসে থাকে — আর সেটিও Dev-এর সীমার মধ্যে গোনা হয়। Dev পূর্ণ বলে D শুরু করা যাবে না। B-র developer এখন মুক্ত, কিন্তু নতুন কাজ ধরার বদলে A-র review-এ সাহায্য করলেন। একে বলে swarming: “নতুন কাজ শুরু করা বন্ধ, চলমান কাজ শেষ করা শুরু।”
- A-র review শেষ, A গেল Done-এ। Review খালি হতেই B টানা হলো (১/১)। Dev-এ এখন শুধু C (১/২)।
- Dev-এ জায়গা — D টানা হলো। Dev আবার ২/২। Backlog-এ বাকি E. খেয়াল করুন, ধাপ ৪-এ আটকে যাওয়ায় D দেরিতে শুরু হলো, কিন্তু A তাড়াতাড়ি শেষ হলো — এটাই WIP limit-এর বিনিময়।
- জরুরি card X. Production-এ payment বন্ধ। Board-এর লিখিত নিয়ম: expedite lane-এ একসাথে একটিমাত্র card, আর সেটি WIP limit ছাড়িয়ে যেতে পারে। তাই X সরাসরি Dev-এ ঢুকল, যদিও Dev পূর্ণ। নিয়মটি আগে থেকে লেখা ছিল বলে কাউকে তর্ক করতে হয়নি।
WIP limit কাউকে অলস বসিয়ে রাখার নিয়ম নয়। এটি একটি সংকেত: “সামনে কোথাও জট লেগেছে — নতুন কাজ ধরার আগে জটটা খুলুন।” সীমা না থাকলে এই সংকেত আসে না; card জমতে থাকে, আর সমস্যা চোখে পড়ে অনেক দেরিতে।
সীমা কত হবে? কোনো জাদুর সংখ্যা নেই। একটি প্রচলিত শুরু হলো কলামে যতজন কাজ করেন, তার কাছাকাছি একটি সংখ্যা; তারপর তথ্য দেখে কমানো-বাড়ানো। সীমা এত কম যে মানুষ প্রায়ই অপেক্ষায় থাকেন, বা এত বেশি যে কখনো ছোঁয়াই হয় না — দুটোই ভুল সংকেত। অংশ ৬-এর সিমুলেটরে দুই প্রান্তই দেখবেন।
৫ · Flow-এর মাপ — lead time, cycle time, throughput আর CFD
Kanban মাপ দিয়ে কথা বলে। কিন্তু শব্দগুলো নিয়ে বাস্তবে অনেক বিভ্রান্তি আছে, তাই আগে নিখুঁত সংজ্ঞা:
| মাপ | সংজ্ঞা | প্রশ্নটি |
|---|---|---|
| Lead time | অনুরোধ গৃহীত হওয়া (board-এ ঢোকা) থেকে গ্রাহকের হাতে পৌঁছানো পর্যন্ত সময় | “চাইলে কতদিনে পাব?” |
| Cycle time | কাজ সত্যিই শুরু হওয়া থেকে শেষ হওয়া পর্যন্ত সময় | “শুরু করলে কতদিনে শেষ হয়?” |
| Throughput | নির্দিষ্ট সময়ে কতগুলো কাজ শেষ হলো (যেমন প্রতি সপ্তাহে) | “আমরা কত গতিতে শেষ করি?” |
| WIP (work in progress) | শুরু হয়েছে কিন্তু শেষ হয়নি, এমন কাজের সংখ্যা | “এই মুহূর্তে কতগুলো চলছে?” |
| Work item age | এখনো চলমান একটি কাজ শুরুর পর কত সময় পেরিয়েছে | “কোন card বুড়ো হয়ে যাচ্ছে?” |
সংজ্ঞা দল-ভেদে আলাদা। কোনো দল lead time মাপে “গ্রাহক অনুরোধ করলেন” থেকে, কেউ “backlog-এ গৃহীত হলো” থেকে। কেউ cycle time-কে lead time-এর প্রতিশব্দ হিসেবেই ব্যবহার করেন; DevOps-এর আলোচনায় (পর্ব ৫৯) “lead time for changes” মানে commit থেকে production-এ চলা পর্যন্ত। তাই দুই দলের সংখ্যা তুলনার আগে জিজ্ঞেস করুন: ঘড়ি কোথায় চালু হয়, কোথায় থামে? Board-এ এই দুটি বিন্দু লিখে রাখাও একটি explicit policy.
Work item age সবচেয়ে কম আলোচিত, কিন্তু প্রতিদিনের কাজে সবচেয়ে কাজের। Cycle time জানা যায় কাজ শেষ হওয়ার পরে; age জানা যায় এখনই। কোনো card-এর age যদি অতীতের ৮৫% card-এর cycle time ছাড়িয়ে যায়, তাহলে সেটি নিয়ে আজই কথা বলা দরকার।
Cumulative flow diagram — এক ছবিতে পুরো ধারা
Cumulative flow diagram (CFD) প্রতিদিন হিসাব রাখে: এ পর্যন্ত মোট কতগুলো card এসেছে, কতগুলো শুরু হয়েছে, কতগুলো শেষ হয়েছে। নিচে ছয় দিনের তথ্য দিয়ে সারি ধরে ধরে CFD বানাই:
| দিন | |
| মোট এসেছে | |
| মোট শুরু | |
| মোট শেষ | |
| WIP = শুরু − শেষ | |
| Backlog = এসেছে − শুরু |
- দিন ১। এ পর্যন্ত মোট ৪টি card এসেছে, ২টি শুরু হয়েছে, একটিও শেষ হয়নি। তাই কলামে কমলা (backlog) ২, নীল (WIP) ২, সবুজ নেই। মনে রাখুন, CFD সেদিনের নতুন সংখ্যা নয়, মোট সংখ্যা দেখায়।
- দিন ২। মোট এসেছে ৬, শুরু ৩, শেষ ১। WIP = ৩ − ১ = ২, backlog = ৬ − ৩ = ৩। প্রথম সবুজ অংশ দেখা দিল।
- দিন ৩। মোট ৮, ৫, ২। WIP = ৩, backlog = ৩। নীল অংশ একটু মোটা হলো।
- দিন ৪। মোট ৯, ৬, ৪। এদিন দুটি card শেষ হলো, তাই WIP নেমে ২; backlog ৩।
- দিন ৫। মোট ১১, ৭, ৫। WIP ২, কিন্তু backlog বেড়ে ৪ — শুরু করার চেয়ে দ্রুত কাজ আসছে।
- দিন ৬। মোট ১২, ৯, ৬। WIP ৩, backlog ৩। প্রতিটি রেখা শুধু ওঠে বা সমান থাকে, কখনো নামে না — কারণ এগুলো মোট সংখ্যা।
- কলাম জুড়ে দিলেই CFD. কোনো দিনে নীল band-এর খাড়া উচ্চতা = সেদিনের WIP (দিন ৫-এ ৭ − ৫ = ২)। আড়াআড়ি দূরত্ব ≈ cycle time: “শুরু” রেখা ২ ছোঁয় দিন ১-এ, “শেষ” রেখা ২ ছোঁয় দিন ৩-এ, অর্থাৎ দ্বিতীয় card-টির মোটামুটি ২ দিন লেগেছে। গড় WIP ১৪/৬ ≈ ২.৩৩, throughput ৬/৬ = ১টি/দিন, তাই Little-এর সূত্রে গড় cycle time ≈ ২.৩৩ দিন (ছয় দিনের ছোট নমুনায় এটি মোটামুটি হিসাব)।
CFD পড়ার তিনটি চেনা লক্ষণ: (১) মাঝের band ক্রমশ মোটা হচ্ছে — WIP জমছে, cycle time বাড়বে; (২) সবুজ রেখা কয়েকদিন সমান — কিছুই শেষ হচ্ছে না, কোথাও আটকে আছে; (৩) ওপরের রেখা অনেক খাড়া — চাহিদা আপনার ক্ষমতার চেয়ে বেশি, backlog অনন্তকাল বাড়বে।
৬ · Little-এর সূত্র — WIP কমালে cycle time কেন কমে
১৯৬১ সালে MIT-এর John D. C. Little queue-তত্ত্বের একটি সাধারণ সূত্র প্রমাণ করেন: একটি স্থিতিশীল ব্যবস্থায় গড়ে ভেতরে থাকা জিনিসের সংখ্যা = গড় আগমনের হার × গড়ে ভেতরে কাটানো সময় (L = λW). System design কোর্সে সূত্রটির প্রমাণ আর server-এর হিসাব আছে: Latency, throughput আর percentile-এর অংশ ৬। এখানে শুধু Kanban-এর ভাষায় সাজিয়ে লিখি:
একটি হিসাব। একটি দলের board-এ গড়ে ১৫টি card চলমান থাকে, আর দল সপ্তাহে গড়ে ৫টি card শেষ করে। তাহলে গড় cycle time = ১৫ ÷ ৫ = ৩ সপ্তাহ। দল যদি WIP limit বসিয়ে চলমান কাজ ৭–৮টিতে নামায় আর throughput একই থাকে, গড় cycle time হবে প্রায় ১.৫ সপ্তাহ। কেউ দ্রুত কাজ করেননি — শুধু একসাথে কম কাজ ধরেছেন।
Little-এর সূত্র কাজ করে কয়েকটি শর্তে:
- স্থিতিশীল ব্যবস্থা: দীর্ঘ সময়ে যত card ঢোকে, মোটামুটি তত card বেরোয়; WIP অবিরাম বাড়ছে না। Backlog প্রতি সপ্তাহে বাড়তে থাকলে পুরো ব্যবস্থার জন্য সূত্রটি খাটে না।
- একই সীমানা: WIP, throughput আর cycle time — তিনটিই একই “শুরু” আর “শেষ” বিন্দু দিয়ে মাপতে হবে। WIP গুনলেন শুধু Dev কলামে, আর cycle time মাপলেন backlog থেকে — তাহলে মিলবে না।
- যথেষ্ট লম্বা সময়ের গড়: দুই দিনের তথ্যে নয়; আর যে card কখনো শেষ হয় না (বাতিল, হারিয়ে যাওয়া), সেগুলো আলাদা করে সামলাতে হয়।
- এটি গড়ের সূত্র: কোনো একটি card কতদিনে শেষ হবে, তা এটি বলে না। সেজন্য অংশ ৭-এর percentile লাগে।
তাহলে WIP কমালে throughput কি কমে যাবে না? দুটি কারণে প্রায়ই কমে না, বরং বাড়ে। এক, কাজ বদলের খরচ (context switching) কমে। দুই, কম কাজ মানে ছোট queue, তাই bug আর প্রশ্ন দ্রুত ধরা পড়ে। কিন্তু সীমা খুব কম হলে মানুষ সত্যিই বসে থাকেন। নিচের সিমুলেটরে একটি কাল্পনিক দল: ৩ জন developer, প্রতিদিন ৮০% সম্ভাবনায় একটি নতুন card আসে, প্রতিটির কাজ ১ থেকে ৫ developer-দিন (গড় ৩)। অর্থাৎ চাহিদা দিনে গড়ে ০.৮ × ৩ = ২.৪ developer-দিন, ক্ষমতা ৩ — ৮০% ব্যস্ততা। একটি card-এ একসাথে একজনের বেশি কাজ করেন না। আর একটি ধরে নেওয়া মান: developer-সংখ্যার চেয়ে প্রতিটি বাড়তি চলমান card দলের ২% সময় কাজ বদলে খায়। একই seed-এ, শুধু WIP limit বদলে, ৪০০ দিন চালানো হয় (প্রথম ১০০ দিন বাদ দিয়ে মাপা):
// Kanban board: 3 developers, ~0.8 new items/day, size 1-5 dev-days.
// Same seed for every run, so only the WIP limit changes.
function mulberry32(a) { return () => { a = (a + 0x6D2B79F5) | 0; let t = Math.imul(a ^ (a >>> 15), 1 | a);
t = (t + Math.imul(t ^ (t >>> 7), 61 | t)) ^ t; return ((t ^ (t >>> 14)) >>> 0) / 4294967296; }; }
const DEVS = 3, DAYS = 400, WARM = 100, SWITCH = 0.02; // assumption: 2% capacity lost per item beyond DEVS
function run(limit) {
const rnd = mulberry32(42), backlog = [], wip = [];
let wipSum = 0, done = 0, ctSum = 0, ltSum = 0;
for (let day = 0; day < DAYS; day++) {
if (rnd() < 0.8) backlog.push({ arrive: day, left: 1 + Math.floor(rnd() * 5) }); // new card?
while (backlog.length && wip.length < limit) { const it = backlog.shift(); it.start = day; wip.push(it); }
const eff = Math.max(0.3, 1 - SWITCH * Math.max(0, wip.length - DEVS));
const each = Math.min(1, DEVS * eff / wip.length); // one person per item at most
if (day >= WARM) wipSum += wip.length;
for (const it of wip) it.left -= each;
for (let i = wip.length - 1; i >= 0; i--) if (wip[i].left <= 1e-9) {
const it = wip.splice(i, 1)[0];
if (day >= WARM) { done++; ctSum += day + 1 - it.start; ltSum += day + 1 - it.arrive; }
}
}
const n = DAYS - WARM, W = wipSum / n, TH = done / n, CT = ctSum / done;
return { W, TH, CT, LT: ltSum / done, little: W / TH, queue: backlog.length };
}
console.log("limit avgWIP thru/day cycle lead WIP/thru backlog@end");
for (const lim of [2, 4, 8, Infinity]) {
const r = run(lim), f = (x, w) => x.toFixed(2).padStart(w);
console.log(String(lim === Infinity ? "none" : lim).padEnd(5) + f(r.W, 8) + f(r.TH, 10) +
f(r.CT, 7) + f(r.LT, 7) + f(r.little, 10) + String(r.queue).padStart(9));
}আউটপুট:
limit avgWIP thru/day cycle lead WIP/thru backlog@end
2 2.00 0.66 3.03 43.60 3.05 56
4 3.44 0.79 4.34 6.03 4.37 1
8 4.93 0.78 6.13 6.55 6.32 0
none 6.31 0.76 7.77 7.77 8.26 0
সীমা ৪: গড় WIP ৩.৪৪, throughput দিনে ০.৭৯ (প্রায় আগমনের হার ০.৮), cycle time ৪.৩৪ দিন, lead time ৬.০৩ দিন — চারটির মধ্যে সবচেয়ে ভালো। সীমা ৮ আর সীমা নেই: throughput প্রায় একই (০.৭৮, ০.৭৬), কিন্তু cycle time বেড়ে ৬.১৩ আর ৭.৭৭ দিন; সীমা না থাকলে সব card এসেই শুরু হয়, তাই lead time = cycle time. সীমা ২: cycle time মাত্র ৩.০৩, কিন্তু এটি ফাঁদ! দুজনের বেশি কাজ করতে পারেন না, ক্ষমতা দিনে ২ developer-দিন, চাহিদা ২.৪ — backlog-এ ৫৬টি card জমেছে, lead time ৪৩.৬০ দিন। পুরো ব্যবস্থা অস্থিতিশীল। Little যাচাই: “WIP/thru” কলাম cycle কলামের প্রায় সমান (৪.৩৭ বনাম ৪.৩৪, ৬.৩২ বনাম ৬.১৩)। সামান্য পার্থক্য আসে মাপার সময়সীমার দুই প্রান্তের অসমাপ্ত card থেকে। সীমা ২-এর ক্ষেত্রেও মেলে (৩.০৫ বনাম ৩.০৩), কারণ শুধু “চলমান” অংশটি স্থিতিশীল — কিন্তু backlog-সহ পুরো ব্যবস্থায় সূত্রটি খাটে না। SWITCH ০.০২ থেকে ০.০৫ করে চালিয়ে দেখুন: সীমাহীন board-এ WIP হু হু করে বাড়ে।
কাজ বদলের খরচ — একজনের হিসাব
মনোযোগ ফিরে পেতে সময় লাগে: আগের কাজটি কোথায় ছিল, কোন file খোলা ছিল, কোন test কেন ব্যর্থ হচ্ছিল। Gerald Weinberg-এর Quality Software Management (১৯৯২) বইয়ের একটি বহুল-উদ্ধৃত আনুমানিক সারণিতে প্রতিটি বাড়তি project-এ প্রায় ২০% সময় হারানোর কথা আছে — এটি অভিজ্ঞতাভিত্তিক অনুমান, নিয়ন্ত্রিত গবেষণার মাপ নয়। নিচের মডেলে আমরা আরও নরম একটি অনুমান নিই: প্রথমটির পর প্রতিটি বাড়তি চলমান কাজে দিনের ১৫%. একজন developer-এর হাতে N টি কাজ, প্রতিটি ১০ ঘণ্টার, দিনে ৮ ঘণ্টা:
// Context switching: one developer, N tasks of 10 hours each, 8-hour days.
// ASSUMPTION (a model, not a measurement): every task beyond the first that is
// "in progress" at the same time costs 15% of the day in switching overhead.
const HOURS = 10, DAY = 8, COST = 0.15;
console.log("n useful h/day | juggle: avg = all done | WIP 1: avg finish all done");
for (let n = 1; n <= 5; n++) {
// (a) juggle all n together: equal share each day, so all finish together
const useful = DAY * Math.max(0, 1 - COST * (n - 1));
const jugDone = (n * HOURS) / useful;
// (b) one at a time (WIP 1): no overhead, task k finishes at k*HOURS/DAY days
let sum = 0;
for (let k = 1; k <= n; k++) sum += (k * HOURS) / DAY;
const seqDone = (n * HOURS) / DAY;
const f = (x, w) => x.toFixed(2).padStart(w);
console.log(n + useful.toFixed(1).padStart(14) + " |" + f(jugDone, 22) + " |" +
f(sum / n, 18) + f(seqDone, 10));
}আউটপুট:
n useful h/day | juggle: avg = all done | WIP 1: avg finish all done
1 8.0 | 1.25 | 1.25 1.25
2 6.8 | 2.94 | 1.88 2.50
3 5.6 | 5.36 | 2.50 3.75
4 4.4 | 9.09 | 3.13 5.00
5 3.2 | 15.63 | 3.75 6.25
৩টি কাজ একসাথে ধরলে কাজের সময় দিনে ৫.৬ ঘণ্টা, আর তিনটিই শেষ হয় ৫.৩৬ দিনে। একটি একটি করে (WIP ১) করলে তিনটিই শেষ ৩.৭৫ দিনে, আর গড়ে একটি কাজ হাতে আসে ২.৫০ দিনে। ৫টিতে পার্থক্য নাটকীয়: ১৫.৬৩ বনাম ৬.২৫ দিন। আরও একটি সূক্ষ্ম কথা: COST শূন্য করলেও একসাথে করলে গড় সমাপ্তি N × ১.২৫ দিন, আর একটি একটি করে করলে (N + ১)/২ × ১.২৫ — কাজ বদলের খরচ না থাকলেও একসাথে করা প্রথম ফল দেরিতে দেয়। এটি একটি মডেল; আপনার দলের আসল খরচ এর চেয়ে কম বা বেশি হতে পারে।
Operating Systems কোর্সে CPU-র ক্ষেত্রেও একই ব্যাপার দেখবেন: process বদলাতে CPU-কেও register আর cache নতুন করে সাজাতে হয় (Context switch). মানুষের মাথার context switching আরও ব্যয়বহুল।
৭ · “কবে শেষ হবে?” — percentile, পূর্বাভাস আর flow efficiency
Cycle time-এর বণ্টন প্রায় কখনো সুষম হয় না। বেশিরভাগ card দ্রুত শেষ হয়, আর কয়েকটি অনেক দিন ঝুলে থাকে — ডান দিকে লম্বা লেজ। তাই গড় দিয়ে কথা দিলে প্রায় অর্ধেক সময় কথা রাখা যায় না। ভালো উপায় percentile: “অতীতের ৮৫% card এত দিনের মধ্যে শেষ হয়েছে।” হিসাবের সহজ পদ্ধতি nearest-rank: n টি মান ছোট থেকে বড় সাজান, p-তম percentile হলো ⌈p/100 × n⌉-তম মান।
নিচের প্রোগ্রাম নির্দিষ্ট seed থেকে ৪০টি শেষ হওয়া card-এর cycle time বানায়, percentile বের করে, তারপর দুটি প্রশ্নের উত্তর দেয়: (ক) আজ শুরু হওয়া একটি card কবে শেষ হবে? (খ) ২০টি card-এর একটি release কবে তৈরি হবে? দ্বিতীয়টির জন্য Monte Carlo পদ্ধতি: অতীতের ৩০ দিনের দৈনিক throughput থেকে এলোমেলোভাবে দিন বেছে ১০,০০০ বার “ভবিষ্যৎ” চালানো।
// Cycle-time percentiles (nearest-rank) and two "by when" forecasts.
function mulberry32(a) { return () => { a = (a + 0x6D2B79F5) | 0; let t = Math.imul(a ^ (a >>> 15), 1 | a);
t = (t + Math.imul(t ^ (t >>> 7), 61 | t)) ^ t; return ((t ^ (t >>> 14)) >>> 0) / 4294967296; }; }
const rnd = mulberry32(2026);
// 40 finished cards: cycle time in days (1 + a long right tail, like real teams)
const ct = Array.from({ length: 40 }, () => 1 + Math.floor(-Math.log(1 - rnd()) * 3.5));
const sorted = [...ct].sort((a, b) => a - b);
const pct = (p) => sorted[Math.ceil(p / 100 * sorted.length) - 1]; // nearest-rank
const mean = ct.reduce((s, x) => s + x, 0) / ct.length;
console.log("sorted:", sorted.join(" "));
console.log("mean", mean.toFixed(2), " p50", pct(50), " p85", pct(85), " p95", pct(95));
console.log("One card started today: 85% of past cards finished within", pct(85), "days");
// Batch forecast: 20 cards, resample past daily throughput (Monte Carlo, 10000 runs)
const daily = Array.from({ length: 30 }, () => Math.floor(rnd() * 4)); // 0..3 done per day
const need = [];
for (let r = 0; r < 10000; r++) {
let left = 20, days = 0;
while (left > 0) { left -= daily[Math.floor(rnd() * daily.length)]; days++; }
need.push(days);
}
need.sort((a, b) => a - b);
const q = (p) => need[Math.ceil(p / 100 * need.length) - 1];
const avgTh = daily.reduce((s, x) => s + x, 0) / daily.length;
console.log("avg throughput", avgTh.toFixed(2), "/day -> naive 20/avg =", (20 / avgTh).toFixed(1), "days");
console.log("20 cards: 50% by day", q(50), " 85% by day", q(85), " 95% by day", q(95));আউটপুট:
sorted: 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 4 4 4 4 5 5 6 6 6 6 7 9 9 10 11
mean 3.45 p50 2 p85 6 p95 9
One card started today: 85% of past cards finished within 6 days
avg throughput 1.83 /day -> naive 20/avg = 10.9 days
20 cards: 50% by day 11 85% by day 13 95% by day 15
গড় ৩.৪৫ দিন, অথচ median (p50) মাত্র ২ — লম্বা লেজ গড়কে টেনে তুলেছে। p85-এর হিসাব: ⌈০.৮৫ × ৪০⌉ = ৩৪-তম মান = ৬; p95: ⌈০.৯৫ × ৪০⌉ = ৩৮-তম মান = ৯. তাই সৎ উত্তর: “এই card ৮৫% সম্ভাবনায় ৬ দিনের মধ্যে, ৯৫% সম্ভাবনায় ৯ দিনের মধ্যে।” ২০টি card-এর ক্ষেত্রে সরল ভাগ (২০ ÷ ১.৮৩ ≈ ১০.৯ দিন) মোটামুটি ৫০% সম্ভাবনার উত্তর দেয়; ৮৫% নিশ্চয়তা চাইলে বলা উচিত ১৩ দিন। শর্ত একটাই: ভবিষ্যৎ মোটামুটি অতীতের মতো হবে — দল, কাজের ধরন বা প্রক্রিয়া বদলালে পুরোনো তথ্য আর খাটে না।
পর্ব ৬০-এ story point আর অন্যান্য estimation পদ্ধতি আসবে। Kanban-এর পূর্বাভাস তার বিকল্প হিসেবে বা পাশাপাশি ব্যবহার করা যায়; কোনটা কখন ভালো, তা নিয়ে practitioner-দের মধ্যে বিতর্ক আছে।
Flow efficiency — কাজ বনাম অপেক্ষার অনুপাত
অংশ ২-এর ছবির card-টিসহ চারটি কাল্পনিক card-এর ইতিহাস নিচে। প্রতিটি ধাপ চিহ্নিত: "a" মানে সক্রিয় কাজ, "w" মানে অপেক্ষা।
// Flow efficiency = active (touch) time / lead time, per card and for the whole set.
// Times in working hours, read from each card's history on the board.
const cards = [
{ id: "BAZ-101", steps: [["dev", 6, "a"], ["wait review", 20, "w"], ["review", 2, "a"], ["wait test", 30, "w"], ["test", 4, "a"], ["wait deploy", 16, "w"]] },
{ id: "BAZ-102", steps: [["dev", 3, "a"], ["review", 1, "a"], ["test", 2, "a"], ["wait deploy", 2, "w"]] },
{ id: "BAZ-103", steps: [["wait spec", 40, "w"], ["dev", 10, "a"], ["blocked: API", 24, "w"], ["dev", 4, "a"], ["wait review", 8, "w"], ["review", 2, "a"]] },
{ id: "BAZ-104", steps: [["dev", 8, "a"], ["wait review", 4, "w"], ["review", 2, "a"], ["wait test", 6, "w"], ["test", 3, "a"]] },
];
let A = 0, L = 0;
for (const c of cards) {
const active = c.steps.filter(s => s[2] === "a").reduce((t, s) => t + s[1], 0);
const lead = c.steps.reduce((t, s) => t + s[1], 0);
const worst = c.steps.filter(s => s[2] === "w").sort((x, y) => y[1] - x[1])[0];
A += active; L += lead;
console.log(c.id, " active", String(active).padStart(2), "h lead", String(lead).padStart(3), "h efficiency",
(100 * active / lead).toFixed(1).padStart(5) + "% longest wait:", worst ? worst[0] + " " + worst[1] + "h" : "-");
}
console.log("ALL active", A, "h lead", L, "h efficiency", (100 * A / L).toFixed(1) + "%");
const avgEff = cards.reduce((t, c) => {
const a = c.steps.filter(s => s[2] === "a").reduce((x, s) => x + s[1], 0);
return t + a / c.steps.reduce((x, s) => x + s[1], 0);
}, 0) / cards.length;
console.log("mean of per-card efficiencies", (100 * avgEff).toFixed(1) + "% (not the same thing)");আউটপুট:
BAZ-101 active 12 h lead 78 h efficiency 15.4% longest wait: wait test 30h
BAZ-102 active 6 h lead 8 h efficiency 75.0% longest wait: wait deploy 2h
BAZ-103 active 16 h lead 88 h efficiency 18.2% longest wait: wait spec 40h
BAZ-104 active 13 h lead 23 h efficiency 56.5% longest wait: wait test 6h
ALL active 47 h lead 197 h efficiency 23.9%
mean of per-card efficiencies 41.3% (not the same thing)
চারটি card মিলিয়ে ১৯৭ ঘণ্টার মধ্যে মাত্র ৪৭ ঘণ্টা কাজ — flow efficiency ২৩.৯%. সবচেয়ে বড় অপেক্ষাগুলো: test-এর জন্য ৩০ ঘণ্টা, আর requirement স্পষ্ট হওয়ার জন্য ৪০ ঘণ্টা। শেষ লাইনটি একটি ফাঁদ দেখায়: প্রতিটি card-এর শতাংশের সাধারণ গড় ৪১.৩%, কারণ ছোট card BAZ-102-এর ৭৫% সমান ওজন পেয়েছে। কোন হিসাব দিচ্ছেন, তা সবসময় বলে দিন। বাস্তবে “সক্রিয়” সময় মাপা কঠিন — অনেক দল শুধু “চলছে” আর “অপেক্ষায়” কলামের সময় দিয়ে আনুমানিক হিসাব করে।
৮ · Scrum, Kanban আর Scrumban — কোনটি কখন
পর্ব ৫-এর (Agile আর Scrum) সাথে মিলিয়ে দেখুন। দুটোই Agile-এর মূল্যবোধে বিশ্বাসী, কিন্তু কাজ সাজানোর কৌশল আলাদা:
| বিষয় | Scrum | Kanban | Scrumban |
|---|---|---|---|
| ছন্দ | নির্দিষ্ট দৈর্ঘ্যের sprint (এক মাস বা কম) | অবিরাম flow; meeting-এর নিজস্ব ছন্দ থাকতে পারে | Sprint থাকতে পারে, কাজ টানা হয় flow-এ |
| ভূমিকা | Product Owner, Scrum Master, Developers | নির্দিষ্ট ভূমিকা বাধ্যতামূলক নয় | প্রায়ই Scrum-এর ভূমিকা রাখা হয় |
| কাজ সীমিত করা | Sprint-এ কতটা নেওয়া হবে, তা দিয়ে পরোক্ষভাবে | প্রতিটি ধাপে স্পষ্ট WIP limit | দুটোই |
| মাঝপথে পরিবর্তন | Sprint Goal ঝুঁকিতে পড়ে এমন পরিবর্তন করা হয় না | জায়গা খালি হলেই নতুন অগ্রাধিকার টানা যায় | প্রায় Kanban-এর মতো |
| প্রধান মাপ | Sprint-এ কী শেষ হলো, velocity (প্রচলিত, Scrum Guide-এ নেই) | Cycle time, throughput, WIP, age | দুটোর মিশ্রণ |
| Board | প্রতি sprint-এ নতুন করে শুরু হয় | চলমান, কখনো “খালি” হয় না | চলমান |
| বেশি মানায় | নতুন product, যেখানে নিয়মিত ছন্দে লক্ষ্য ঠিক করা দরকার | Support, maintenance, অপারেশন — যেখানে কাজ অনিয়মিত আসে | Scrum-এর দল, যারা flow-এর মাপ যোগ করতে চায় |
Scrumban শব্দটি সাধারণত Corey Ladas-এর সাথে যুক্ত (২০০৮ সালের দিকের প্রবন্ধ, ২০০৯ সালের বই Scrumban). শুরুতে এর ধারণা ছিল Scrum থেকে Kanban-এ যাওয়ার একটি পথ; এখন অনেকে দুটোর যেকোনো মিশ্রণকেই Scrumban বলেন — তাই কেউ “আমরা Scrumban করি” বললে জিজ্ঞেস করুন ঠিক কোন নিয়মগুলো মানা হয়। Scrum.org ২০১৮ সালের দিকে Scrum দলের জন্য আলাদা একটি Kanban নির্দেশিকাও প্রকাশ করেছে।
একটি সাধারণ ভুল: “আমাদের board আছে, তাই আমরা Kanban করি।” WIP limit, লিখিত নিয়ম আর flow-এর মাপ ছাড়া board শুধু একটি কাজের তালিকা। আবার “আমরা Kanban করি, তাই কোনো পরিকল্পনা লাগে না” — এটাও ভুল; replenishment (backlog-এ কী আসবে ঠিক করা) আর review-এর নিয়মিত meeting Kanban-এরও অংশ।
৯ · ধারাবাহিক উন্নতি — kaizen, retrospective আর 5 whys
Kaizen জাপানি শব্দ, মোটামুটি অর্থ “ভালোর দিকে বদল”। Lean-এ এর মানে: বড় বিপ্লব নয়, প্রতিদিনের ছোট উন্নতি — আর সেটা করবেন কাজের সবচেয়ে কাছের মানুষেরা। Scrum-এর retrospective (পর্ব ৫) এই চিন্তারই একটি নিয়মিত রূপ। Kanban-এ উন্নতির ভিত্তি তথ্য: CFD-তে band মোটা হচ্ছে কোথায়, কোন কলামে card-এর age বেশি, কোন class of service কত ঘন ঘন আসে।
সমস্যা ঘটলে মূল কারণ খোঁজার একটি সহজ কৌশল 5 whys — “কেন?” প্রশ্নটি বারবার করা, যতক্ষণ না একটি বদলানো যায় এমন প্রক্রিয়ায় পৌঁছান। কৌশলটি Toyota-য় Sakichi Toyoda-র সময় থেকে প্রচলিত বলে বলা হয়, আর Ohno একে জনপ্রিয় করেন। একটি কাল্পনিক ঘটনা দিয়ে দেখি:
- সমস্যাCheckout ৪০ মিনিট বন্ধ
- কেন?DB connection শেষ
- কেন?প্রতি item-এ আলাদা query
- কেন?Load test-এ ১ item-এর cart
- কেন?Test data-র মালিক নেই
- কেন?Done-এর শর্তে নেই
- প্রতিকারনিয়ম বদল
- সমস্যা। একটি কাল্পনিক অনলাইন বাজার অ্যাপে ঈদের আগের সন্ধ্যায় checkout ৪০ মিনিট বন্ধ ছিল। প্রথম নিয়ম: আগে service ফেরানো, তারপর বিশ্লেষণ। আর বিশ্লেষণ হবে দোষারোপ ছাড়া (blameless) — লক্ষ্য দুর্বল প্রক্রিয়া খোঁজা, দোষী মানুষ নয়।
- কেন ১ — database-এর connection ফুরিয়ে গিয়েছিল। Checkout service-এর connection pool পূর্ণ, নতুন অনুরোধ অপেক্ষা করতে করতে timeout. এটা লক্ষণ, কারণ নয় — শুধু pool বড় করলে সমস্যা পরের বার আরও বড় হয়ে ফিরবে।
- কেন ২ — নতুন release-এ cart-এর প্রতিটি item-এর জন্য আলাদা query. Discount যাচাইয়ের নতুন কোড একটি loop-এর ভেতরে database ডাকছিল। ২০ item-এর cart মানে ২০টি query.
- কেন ৩ — load test এটা ধরেনি। Load test-এর সব cart-এ মাত্র ১টি item ছিল, অথচ ঈদের আগে মানুষ অনেক জিনিস একসাথে কেনেন।
- কেন ৪ — test data এক বছর ধরে হালনাগাদ হয়নি। এর কোনো মালিক নেই; প্রত্যেকে ভেবেছেন অন্য কেউ দেখছেন।
- কেন ৫ — “বাস্তবসম্মত data দিয়ে performance test” কোনো কলামের done-এর শর্তে ছিল না। ঈদের আগে অনেক কাজ একসাথে শেষ করার চাপে (WIP বেশি) review-ও তাড়াহুড়ো করে হয়েছিল। এখানে আমরা একটি প্রক্রিয়ায় পৌঁছেছি, যা বদলানো যায়।
- প্রতিকার — প্রতিটি স্তরে একটি করে। Review কলামের done-এর শর্তে যোগ হলো “বাস্তবসম্মত cart-আকারে load test”; test data-র একজন মালিক ঠিক হলো; connection pool ৮০% ছাড়ালে সতর্কবার্তা; বড় উৎসবের আগের সপ্তাহে WIP limit আরও কমানো। প্রতিটি পরিবর্তনের ফল পরের retrospective-এ যাচাই হবে। সতর্কতা: বাস্তবে কারণ প্রায়ই একটি সরলরেখা নয়, শাখা-প্রশাখা থাকে; পাঁচ সংখ্যাটিও নিয়ম নয়, একটি অভ্যাস।
আরও গভীরে: Donald Reinertsen-এর The Principles of Product Development Flow (২০০৯) queue-তত্ত্ব দিয়ে দেখান কেন বড় batch আর উচ্চ ব্যস্ততা product development-এ দেরি বাড়ায়; Daniel Vacanti-র Actionable Agile Metrics for Predictability (২০১৫) cycle time, CFD আর Little-এর সূত্রের শর্ত নিয়ে বিস্তারিত লেখেন। Kanban-এর সংজ্ঞা নিয়ে দুটি ধারা আছে — Anderson-এর Kanban University-র “Kanban Method” আর Vacanti ও Coleman-এর The Kanban Guide (২০২০ সালের দিকে) — শব্দ আর জোর কিছুটা আলাদা। DevOps-এর মূল চারটি DORA মাপ (পর্ব ৫৯; পরের রিপোর্টগুলোতে পঞ্চম একটি মাপও আলোচিত) এই flow-চিন্তাকে delivery pipeline-এ নিয়ে যায়।
পরীক্ষা ও ইন্টারভিউতে:
- Lead time আর cycle time-এর পার্থক্য কী? — Lead time অনুরোধ গৃহীত হওয়া থেকে পৌঁছানো পর্যন্ত; cycle time কাজ শুরু থেকে শেষ পর্যন্ত; সংজ্ঞা দল-ভেদে আলাদা, তাই সীমানা বলে দিতে হয়।
- গড় WIP ২০, throughput সপ্তাহে ১০ — গড় cycle time? — Little-এর সূত্রে ২০ ÷ ১০ = ২ সপ্তাহ, যদি ব্যবস্থা স্থিতিশীল হয়।
- Software-এর সাতটি অপচয় বলুন। — Partially done work, extra features, relearning, handoffs, delays, task switching, defects (Poppendieck).
- Scrum আর Kanban-এর মূল পার্থক্য? — Scrum নির্দিষ্ট দৈর্ঘ্যের sprint আর ভূমিকা দিয়ে চলে; Kanban অবিরাম flow আর প্রতি ধাপের WIP limit দিয়ে।
- WIP limit ভাঙতে হলে কী করবেন? — নিয়মে লেখা ব্যতিক্রম (যেমন expedite lane) ছাড়া নয়; বারবার ভাঙলে সীমা বা প্রক্রিয়া নিয়ে retrospective-এ আলোচনা।
১০ · AI-এর যুগে — flow-এর হিসাবে AI-কে যাচাই
AI এখন board-এর তথ্য থেকে report বানায়, sprint-এর সারাংশ লেখে, এমনকি Jira বা অন্য tool-এর data দেখে পূর্বাভাস দেয়। কাজটি দ্রুত হয়, কিন্তু এই বিষয়ে AI-এর কিছু পরিচিত ভুল আছে:
| AI-এর ভুল | কীভাবে ধরবেন |
|---|---|
| Little-এর সূত্র অস্থিতিশীল ব্যবস্থায় প্রয়োগ, বা WIP আর cycle time ভিন্ন সীমানায় মাপা | জিজ্ঞেস করুন: আগমন আর বিদায় কি সমান? ঘড়ি কোথায় চালু হয়? |
| গড় cycle time দিয়ে তারিখের প্রতিশ্রুতি | Percentile আর বণ্টন চেয়ে নিন; নিজে nearest-rank হিসাব করে মেলান |
| বানানো পরিসংখ্যান (“industry-তে গড় flow efficiency এত %”) | উৎস চান; না পেলে বাদ দিন |
| “Kanban Guide বলে WIP = দলের সদস্য সংখ্যা” জাতীয় নিয়ম বানানো | মূল নির্দেশিকা বা বই নিজে পড়ুন; বই আর বছরও যাচাই করুন |
| Board-এর tool-এ automation বা script-এর জন্য ভুল API, ভুল flag | অফিসিয়াল documentation দেখুন, আগে একটি পরীক্ষার project-এ চালান |
| 5 whys-এ একজন মানুষকে “মূল কারণ” বানানো | প্রতিটি উত্তর কি একটি প্রক্রিয়া, যা বদলানো যায়? না হলে আবার “কেন?” |
নিচের prompt-এ AI-কে হিসাবের ধাপ দেখাতে আর অনুমানগুলো আলাদা করে লিখতে বলা হয়েছে — যাতে আপনি প্রতিটি সংখ্যা নিজে মেলাতে পারেন। আর দলের আসল data দেওয়ার আগে নাম, গ্রাহকের তথ্য বা গোপন কিছু থাকলে মুছে দিন।
AI-এর দেওয়া flow-বিশ্লেষণ হাতে পেলে — চেকলিস্ট
ভাবনার প্রশ্ন
প্রতিটি প্রশ্ন নিয়ে নিজে কিছুক্ষণ ভাবুন — তারপর “→ উত্তর” চাপুন।
প্র ০১Toyota-র কাগজের kanban আর software দলের Kanban board — নাম এক, কাজও কি এক?
মিল আছে, কিন্তু পার্থক্যও গভীর। Toyota-র কারখানায় kanban কার্ড ছিল একটি পুনরায় পূরণের সংকেত। পরের ধাপ একটি বাক্স যন্ত্রাংশ ব্যবহার করলে খালি বাক্সের কার্ড আগের ধাপে ফিরে যেত — “এতগুলো আবার বানাতে হবে।” কার্ডের সংখ্যাই ছিল জমা মালের সীমা: কার্ড না থাকলে কেউ বানাতে পারতেন না। অর্থাৎ WIP limit কার্ডের ভেতরেই গাঁথা ছিল।
Software-এর Kanban-এ এই চিন্তা নেওয়া হয়েছে, কিন্তু কাজের প্রকৃতি আলাদা। কারখানায় একই যন্ত্রাংশ হাজারবার বানানো হয়; প্রতিটি বানাতে প্রায় একই সময় লাগে। Software-এর প্রতিটি কাজ নতুন — কোনোটি এক ঘণ্টার, কোনোটি তিন সপ্তাহের, আর শুরুতে প্রায়ই জানা যায় না কোনটি কেমন। তাই software-এ cycle time-এর বণ্টন অনেক ছড়ানো, ডান দিকে লম্বা লেজ। এ কারণেই আমরা গড়ের বদলে percentile ব্যবহার করি।
আরেকটি পার্থক্য: কারখানায় জমা মাল চোখে দেখা যায়। Software-এ জমা কাজ অদৃশ্য — একটি branch, একটি খসড়া নকশা, কারও মাথায় থাকা “পরে করব”। Anderson-এর পদ্ধতিতে board-টি তাই শুধু সংকেত নয়, অদৃশ্যকে দৃশ্যমান করার যন্ত্র। অনেক দল প্রথমবার সব কাজ board-এ তুলে অবাক হয় — যত কাজ চলছে বলে ভেবেছিল, আসলে তার দ্বিগুণ।
তৃতীয় পার্থক্য উদ্দেশ্যে। Toyota-র লক্ষ্য ছিল খরচ আর জমা কমানো। Software-এ বড় লক্ষ্য শেখার গতি: কাজ দ্রুত গ্রাহকের কাছে গেলে দ্রুত জানা যায় সেটা ঠিক ছিল কি না। তাই lean-এর অনুবাদ অন্ধ নকল নয়; Poppendieck-রা নিজেরাই সতর্ক করেছিলেন যে কারখানার চর্চা হুবহু তুলে আনলে ভুল হবে, নীতিগুলো বুঝে নতুন করে প্রয়োগ করতে হবে।
মূল উপলব্ধি: নাম আর মূল নীতি (pull, সীমিত WIP, দৃশ্যমানতা) এক; কিন্তু software-এর কাজের অনিশ্চয়তা আর অদৃশ্যতার জন্য মাপার পদ্ধতি আর লক্ষ্য বদলে নিতে হয়।
প্র ০২WIP limit-এর কারণে কেউ বসে থাকলে সেটা কি নিজেই একটি অপচয় নয়? ব্যবস্থাপকেরা “সবাই ১০০% ব্যস্ত” চাইলে কী বলবেন?
এটি lean-এর সবচেয়ে বিপরীত-স্বজ্ঞাত শিক্ষা: মানুষের ব্যস্ততা আর কাজের প্রবাহ এক জিনিস নয়। Queue-তত্ত্বে দেখা যায়, কোনো সেবাকেন্দ্রের ব্যস্ততা ১০০%-এর কাছে গেলে অপেক্ষার সময় সমানুপাতিক হারে নয়, বিস্ফোরকভাবে বাড়ে। ঢাকার রাস্তা যখন প্রায় পূর্ণ, তখন আরও কয়েকটি গাড়ি ঢুকলেই জট কয়েক গুণ লম্বা হয়। System design কোর্সে এর হিসাব আছে (Latency, throughput আর percentile-এর অংশ ৭)। ১৯৬১ সালে J. F. C. Kingman-এর একটি আনুমানিক সূত্রও দেখায়, অপেক্ষা ব্যস্ততা ρ-এর সাথে মোটামুটি ρ/(১ − ρ) হারে বাড়ে।
Software দলে এর অর্থ: সবাই সারাক্ষণ পূর্ণ ব্যস্ত থাকলে নতুন একটি জরুরি কাজ বা একটি review-এর অনুরোধ বসে থাকে, কারণ কারও হাত খালি নেই। Review-এর queue লম্বা হয়, card-এর age বাড়ে, আর গ্রাহকের কাছে পৌঁছাতে দেরি হয় — যদিও প্রত্যেকে ব্যস্ত। Donald Reinertsen-এর ভাষায়, product development-এ সবচেয়ে বড় লুকানো খরচ হলো queue, আর ব্যবস্থাপকেরা সাধারণত তা মাপেন না।
তাহলে সীমার কারণে “মুক্ত” মানুষটি কী করবেন? Kanban-এর উত্তর: আটকে থাকা card-এ সাহায্য (review, test, blocked কাজের বাধা সরানো), নিজের কাজের ধারা উন্নত করা, বা শেখা। এতে সামনের জট খোলে, আর পুরো দলের throughput বাড়ে। অংশ ৬-এর সিমুলেটরে দেখেছেন: সীমা ৪-এ সবচেয়ে কম lead time, যদিও সীমাহীন board-এ মানুষ “বেশি ব্যস্ত” ছিলেন।
তবে উল্টো দিকটিও সত্য: সীমা খুব কম হলে ক্ষমতা নষ্ট হয় — সিমুলেটরে সীমা ২-এ backlog ৫৬টিতে পৌঁছেছিল। তাই ব্যবস্থাপকের সাথে আলোচনার ভালো ভাষা হলো তথ্য: “গত দুই মাসে cycle time-এর p85 ছিল ১২ দিন; WIP limit বসানোর পর ৭ দিন, throughput একই।” মতামতের বদলে মাপ।
মূল উপলব্ধি: লক্ষ্য মানুষকে ব্যস্ত রাখা নয়, কাজকে চলমান রাখা। কিছুটা খালি ক্ষমতা জট সামলানোর জন্য দরকারি, অপচয় নয়।
প্র ০৩“কবে শেষ হবে?” — estimate করে উত্তর দেবেন, নাকি অতীতের তথ্য থেকে forecast? দুটোর পার্থক্য কোথায়?
প্রচলিত পথ হলো estimate: দল বসে প্রতিটি কাজের আকার অনুমান করে (ঘণ্টা বা story point), যোগ করে, ক্ষমতা দিয়ে ভাগ করে। পর্ব ৬০-এ এর পদ্ধতিগুলো আসবে। সমস্যা হলো, মানুষের অনুমান নিয়মিতভাবে আশাবাদী; মনোবিজ্ঞানীরা একে “planning fallacy” বলেন (Kahneman ও Tversky ১৯৭০-এর দশকে নামটি দেন)। আর বেশি সময় যায় যেগুলো কেউ অনুমানই করেননি — অপেক্ষা, হঠাৎ আসা bug, অন্য দলের দেরি।
Kanban-পন্থীরা প্রায়ই ভিন্ন পথ নেন: forecast. অতীতে আপনার দল আসলে কতদিনে কাজ শেষ করেছে, সেই তথ্যে অপেক্ষা, bug, ছুটি — সবকিছুই আগে থেকে ঢুকে আছে। তাই অংশ ৭-এর প্রোগ্রামের মতো “৮৫% সম্ভাবনায় ১৩ দিনের মধ্যে” উত্তরটি সম্ভাবনাসহ আসে, এবং প্রায়ই অনুমানের চেয়ে বাস্তবের কাছাকাছি থাকে। Monte Carlo পদ্ধতি এখানে জনপ্রিয়, কারণ গড়ের সরল ভাগ শুধু ৫০% নিশ্চয়তা দেয়।
কিন্তু forecast-এর নিজস্ব শর্ত আছে। এক, অতীতের তথ্য লাগে — নতুন দল বা একেবারে নতুন ধরনের কাজে নেই। দুই, ভবিষ্যৎ অতীতের মতো হতে হবে; দল অর্ধেক হলে, বা কাজের আকার হঠাৎ বড় হলে পুরোনো বণ্টন আর খাটে না। তিন, card-গুলো মোটামুটি তুলনীয় আকারের হওয়া দরকার; তাই অনেক দল বড় কাজ আগে ছোট ছোট card-এ ভাঙে, যা নিজেই flow-এর জন্য ভালো।
“#NoEstimates” নামে ২০১০-এর দশকে একটি আলোচনা জনপ্রিয় হয়, যা বলে অনেক ক্ষেত্রে বিস্তারিত estimate-এর খরচ তার উপকারের চেয়ে বেশি। এটি বিতর্কিত — চুক্তিভিত্তিক বা নির্দিষ্ট বাজেটের project-এ estimate প্রায়ই এড়ানো যায় না। বাস্তবে অনেক দল দুটোই ব্যবহার করে: শুরুতে মোটা অনুমান, তথ্য জমলে forecast দিয়ে হালনাগাদ।
মূল উপলব্ধি: প্রতিশ্রুতির সাথে নিশ্চয়তার মাত্রা বলুন। “১০ দিন” বলার চেয়ে “৫০% সম্ভাবনায় ১১ দিন, ৮৫% সম্ভাবনায় ১৩ দিন” বেশি সৎ — আর গ্রাহকও ঝুঁকি বুঝে সিদ্ধান্ত নিতে পারেন।
প্র ০৪Cycle time-কে দলের লক্ষ্য বানিয়ে দিলে কী হতে পারে? মাপ যখন লক্ষ্য হয়ে যায়, তখন কী বদলায়?
অর্থনীতিবিদ Charles Goodhart ১৯৭৫ সালে মুদ্রানীতি নিয়ে একটি পর্যবেক্ষণ দেন; পরে নৃবিজ্ঞানী Marilyn Strathern (১৯৯৭) তার একটি জনপ্রিয় রূপ লেখেন: “কোনো মাপ লক্ষ্য হয়ে গেলে সেটি আর ভালো মাপ থাকে না।” একে Goodhart’s law বলা হয়। Flow-এর মাপ এর বাইরে নয়।
ধরুন ব্যবস্থাপক ঘোষণা করলেন, “প্রত্যেক দলের cycle time ৫ দিনের নিচে রাখতে হবে, না হলে মূল্যায়নে কাটা যাবে।” সম্ভাব্য প্রতিক্রিয়া: কাজ আসল অর্থে ছোট না করে শুধু card-কে কৃত্রিমভাবে ভাগ করা; ঘড়ি দেরিতে চালু করা (“Dev” কলামে ঢোকার আগে লুকানো একটি “প্রস্তুতি” কলাম); কঠিন কাজ এড়িয়ে চলা; test বাদ দিয়ে card “Done” করা, যার ফলে পরে bug ফিরে আসে। সংখ্যা ভালো দেখায়, গ্রাহকের অভিজ্ঞতা খারাপ হয়।
এ কারণে DORA গবেষণা (পর্ব ৫৯) মূল চারটি মাপ একসাথে দেখতে বলে — গতির মাপের পাশে স্থিতিশীলতার মাপ (যেমন কত শতাংশ পরিবর্তনে সমস্যা হয়)। একটি মাপ ভালো করতে গিয়ে অন্যটি খারাপ হলে চোখে পড়ে। Kanban-এ একই কৌশল: cycle time-এর পাশে throughput, ফিরে আসা bug-এর সংখ্যা আর গ্রাহকের সন্তুষ্টি দেখা।
দ্বিতীয় নীতি: মাপ দলের নিজের শেখার জন্য, দলগুলোর তুলনা বা ব্যক্তির মূল্যায়নের জন্য নয়। দুই দলের কাজের ধরন, সংজ্ঞা আর সীমানা আলাদা; তাদের cycle time তুলনা প্রায়ই অর্থহীন (অংশ ৫-এর সতর্কতা মনে করুন)। W. Edwards Deming — যাঁর চিন্তা জাপানি শিল্পে, আর তার মধ্য দিয়ে lean-এ প্রভাব ফেলেছিল বলে ধরা হয় — বারবার বলতেন, ব্যবস্থার ফলাফলের বেশিরভাগ ঠিক করে ব্যবস্থা নিজে, ব্যক্তি নয়।
মূল উপলব্ধি: মাপ প্রশ্ন তোলার জন্য, শাস্তি দেওয়ার জন্য নয়। কয়েকটি পরস্পর-ভারসাম্যপূর্ণ মাপ একসাথে দেখুন, আর সংখ্যার পেছনের গল্প জিজ্ঞেস করুন।
প্র ০৫5 whys কি সবসময় মূল কারণে পৌঁছায়? জটিল software ব্যর্থতায় এর সীমা কোথায়?
5 whys-এর শক্তি তার সরলতায়: কোনো tool লাগে না, যে কেউ শুরু করতে পারেন, আর এটি “লক্ষণ সারানো” থেকে “প্রক্রিয়া বদলানো”-র দিকে ঠেলে দেয়। কিন্তু এর কয়েকটি পরিচিত দুর্বলতা আছে, যা নিরাপত্তা-প্রকৌশল আর software reliability-র আলোচনায় বহুবার উঠেছে।
এক, একটিমাত্র সরলরেখা। প্রতিটি “কেন”-র একটি উত্তর নিলে একটি শিকল পাওয়া যায়; কিন্তু বাস্তবের বড় ব্যর্থতা প্রায়ই অনেকগুলো ছোট দুর্বলতার একসাথে মিলে যাওয়া। ১৯৮০-র দশকের Therac-25 বিকিরণ-যন্ত্রের দুর্ঘটনা নিয়ে Nancy Leveson ও Clark Turner-এর বিশ্লেষণ (১৯৯৩) দেখায়: software-এর race condition, hardware interlock সরিয়ে দেওয়া, অস্পষ্ট error বার্তা আর দুর্বল রিপোর্টিং ব্যবস্থা — সব মিলেই দুর্ঘটনা। একটি “মূল কারণ” খুঁজলে বাকিগুলো বাদ পড়ত। তাই অনেকে fishbone (Ishikawa) diagram বা একাধিক শাখার বিশ্লেষণ পাশাপাশি ব্যবহার করেন।
দুই, প্রশ্নকারীর জ্ঞানের সীমা। যিনি প্রশ্ন করছেন, তিনি যে কারণ জানেন না, তা উত্তরে আসবে না। ভিন্ন দলের মানুষ একই ঘটনায় ভিন্ন শিকল বানাতে পারেন।
তিন, দোষারোপের ফাঁদ। “কেন?”-র উত্তর সহজেই “কারণ রহিম ভুল করেছেন” হয়ে যায়। তখন মানুষ ভবিষ্যতে ভুল লুকান, আর শেখা বন্ধ হয়। এজন্য আধুনিক incident review “blameless” হয়: ধরে নেওয়া হয় প্রত্যেকে তখনকার তথ্যে যুক্তিসংগত কাজই করেছিলেন, তাহলে ব্যবস্থার কোন দুর্বলতা ভুলটিকে সম্ভব করল? Toyota-র andon cord-এর পেছনেও একই চিন্তা — সমস্যা জানানো পুরস্কারের যোগ্য, শাস্তির নয়।
চার, “পাঁচ” সংখ্যাটি জাদু নয়। কখনো তিনটিতেই একটি বদলানো যায় এমন প্রক্রিয়া পাওয়া যায়, কখনো সাতটি লাগে। থামার নিয়ম: উত্তরটি কি একটি নিয়ন্ত্রণযোগ্য প্রক্রিয়া, যার পরিবর্তন সমস্যাটি আবার ঘটা কমাবে?
মূল উপলব্ধি: 5 whys একটি শুরুর কৌশল, পূর্ণ বিশ্লেষণ নয়। একাধিক শাখা খুঁজুন, দোষারোপ এড়ান, আর প্রতিকারের ফল পরে মেপে দেখুন।
অনুশীলন
হিসাব, নকশা-সমালোচনা আর আউটপুট অনুমান — প্রতিটির পূর্ণ উত্তর দেওয়া আছে।
-
Little-এর সূত্রের হিসাব: একটি কাল্পনিক বিশ্ববিদ্যালয়ের ফলাফল পোর্টালের support দলের board-এ গত তিন মাসে গড়ে ১২টি card চলমান ছিল, আর দল দিনে গড়ে ৩টি card শেষ করেছে। ব্যবস্থা স্থিতিশীল। (ক) গড় cycle time কত? (খ) দল গড় cycle time ২.৫ দিনে নামাতে চায়, throughput একই রেখে। গড় WIP কত হতে হবে? (গ) অন্য একটি দলের গড় cycle time ৫ দিন আর throughput দিনে ২টি — তাদের গড় WIP কত?
(ক) গড় cycle time = গড় WIP ÷ throughput = ১২ ÷ ৩ = ৪ দিন.
(খ) গড় WIP = cycle time × throughput = ২.৫ × ৩ = ৭.৫. অর্থাৎ WIP limit এমনভাবে বসাতে হবে যাতে গড়ে ৭–৮টি card চলে। শর্ত: WIP কমানোর পরেও throughput দিনে ৩ থাকতে হবে, আর সীমা এত কম হওয়া চলবে না যে মানুষ বসে থাকেন।
(গ) গড় WIP = ৫ × ২ = ১০টি card. সতর্কতা: দুই দলের সংখ্যা তুলনার আগে দেখুন তারা একই শুরু-শেষ বিন্দু দিয়ে মাপছে কি না।
-
Board-এর নকশা সমালোচনা: একটি দলের board-এ চারটি কলাম: “To do”, “Doing”, “Waiting”, “Done”. কোনো WIP limit নেই। “Doing”-এ ২২টি card, “Waiting”-এ ১৫টি, দলে ৬ জন। জরুরি কাজ যে কেউ সরাসরি “Doing”-এ বসিয়ে দেন। কী কী সমস্যা দেখছেন, আর কীভাবে নতুন করে সাজাবেন?
- WIP অনেক বেশি: ৬ জনের হাতে ২২টি চলমান কাজ — প্রত্যেকে গড়ে তিনটির বেশি; কাজ বদলের খরচ আর লম্বা cycle time নিশ্চিত। সমাধান: কলাম-ভিত্তিক WIP limit, শুরুতে মানুষের সংখ্যার কাছাকাছি (যেমন Dev ৬), পরে তথ্য দেখে সমন্বয়।
- “Waiting” কলাম অস্পষ্ট: কীসের অপেক্ষা? Review, test, না অন্য দলের উত্তর? প্রতিটি আলাদা জট, আলাদা প্রতিকার। সমাধান: আসল ধাপ অনুযায়ী কলাম (Dev → Review → Test → Done), প্রতিটির ভেতরে “চলছে” আর “শেষ, অপেক্ষায়” ভাগ; বাইরের কারণে আটকে থাকা card-এ blocked চিহ্ন আর কারণ লেখা।
- জরুরি কাজের নিয়ম নেই: সবকিছু জরুরি হয়ে যায়। সমাধান: expedite swimlane, সীমা ১, কে কোন কাজকে expedite বলতে পারবেন তা লেখা, আর মাসে কতবার ব্যবহার হলো তা মাপা।
- Done-এর শর্ত নেই: প্রতিটি কলামের বেরোনোর শর্ত লেখা।
- মাপ নেই: প্রতিটি card কলামে ঢোকার তারিখ রাখা, যাতে cycle time, age আর CFD বানানো যায়।
-
আউটপুট অনুমান করুন: নিচের JavaScript কোডটি কী ছাপবে? তারপর বলুন, দ্বিতীয় লাইনের
(a, b) => a - bবাদ দিয়ে শুধু.sort()লিখলে প্রথম লাইনের আউটপুট কী হতো।const ct = [3, 8, 1, 2, 5, 2, 13, 4, 2, 6]; const s = [...ct].sort((a, b) => a - b); const p = (q) => s[Math.ceil(q / 100 * s.length) - 1]; console.log(p(50), p(85), p(95)); console.log(ct.reduce((a, b) => a + b) / ct.length);3 8 13 4.6সাজানো তালিকা: 1 2 2 2 3 4 5 6 8 13. p50: ⌈০.৫ × ১০⌉ = ৫-তম মান = ৩; p85: ⌈৮.৫⌉ = ৯-তম = ৮; p95: ⌈৯.৫⌉ = ১০-তম = ১৩. গড় ৪৬ ÷ ১০ = ৪.৬ — median ৩-এর চেয়ে বেশি, কারণ ১৩ দিনের একটি card গড়কে টেনেছে।
শুধু
.sort()লিখলে JavaScript সংখ্যাগুলোকে লেখা (string) হিসেবে সাজায়: 1, 13, 2, 2, 2, 3, 4, 5, 6, 8. তখন প্রথম লাইন ছাপত2 6 8— কোনো error ছাড়াই ভুল percentile! AI-এর লেখা metric script-এ এই ভুল প্রায়ই দেখা যায়; একটি ছোট হাতে-হিসাব করা উদাহরণ দিয়ে যাচাই করলেই ধরা পড়ে। -
CFD আর flow efficiency পড়া: একটি দলের CFD-তে গত তিন সপ্তাহে “Done” রেখা প্রায় সমান গতিতে উঠছে, কিন্তু “শুরু” রেখা আরও খাড়াভাবে উঠছে, আর মাঝের band ক্রমশ মোটা। একই সময়ে একটি card-এর ইতিহাস: dev ৪ ঘণ্টা, review-এর অপেক্ষা ১২ ঘণ্টা, review ২ ঘণ্টা, deploy-এর অপেক্ষা ২২ ঘণ্টা। (ক) CFD কী বলছে? (খ) card-টির flow efficiency কত? (গ) প্রথম কোন পরিবর্তন চেষ্টা করবেন?
(ক) দল শেষ করার চেয়ে দ্রুত কাজ শুরু করছে। WIP বাড়ছে, তাই throughput একই থাকলে Little-এর সূত্রে cycle time বাড়তেই থাকবে। এটা WIP limit না থাকার (বা না মানার) ক্লাসিক লক্ষণ।
(খ) সক্রিয় সময় ৪ + ২ = ৬ ঘণ্টা; lead time ৪ + ১২ + ২ + ২২ = ৪০ ঘণ্টা; flow efficiency = ৬ ÷ ৪০ = ১৫%.
(গ) দুটি পরিবর্তন: WIP limit বসিয়ে নতুন কাজ শুরু থামানো, আর সবচেয়ে বড় অপেক্ষা — deploy-এর ২২ ঘণ্টা — নিয়ে কাজ করা। হয়তো deploy সপ্তাহে একবার হাতে হয়; ছোট আর ঘন ঘন automated deploy (পর্ব ৫৯) এই অপেক্ষা অনেক কমাতে পারে। Developer-কে দ্রুত কোড লিখতে বলা এখানে প্রায় কোনো কাজে আসবে না।
নিজেকে যাচাই করুন
ভুল হলে কারণসহ ব্যাখ্যা পাবেন, আবার চেষ্টাও করতে পারবেন।
ক্রমWomack ও Jones-এর Lean Thinking (১৯৯৬) বইয়ের পাঁচটি lean নীতি সঠিক ক্রমে সাজান (▲▼ চেপে সরান)
- Value — গ্রাহক কী মূল্য দেন, তা ঠিক করা
- Value stream — মূল্য তৈরির পুরো পথ চিহ্নিত করা
- Flow — পথটিতে কাজ থামা ছাড়া বয়ে যাওয়া
- Pull — চাহিদা এলে তবেই টেনে নেওয়া
- Perfection — অবিরাম উন্নতি
একটি Kanban board-এ Review কলামের WIP limit ২, আর সেখানে এখন ২টি card আছে। একজন developer তাঁর card-এর development শেষ করলেন। Kanban-এর নীতি অনুযায়ী সবচেয়ে ভালো পদক্ষেপ কোনটি?
- Card-টি Review-এ ঠেলে দেওয়া, সীমা ৩ হয়ে গেলেও
- Card-টি Dev-এ “শেষ, অপেক্ষায়” রেখে চলমান review-এ সাহায্য করা
- Backlog থেকে নতুন card শুরু করা
- Review বাদ দিয়ে card-টি Done-এ পাঠানো
একটি স্থিতিশীল Kanban ব্যবস্থায় গড় WIP ১৮টি card, আর গড় throughput দিনে ৬টি card. Little-এর সূত্র অনুযায়ী গড় cycle time কত?
- প্রায় ০.৩৩ দিন
- ১০৮ দিন
- ৩ দিন
- ১২ দিন
Lead time আর cycle time সম্পর্কে কোন বক্তব্যটি সবচেয়ে সঠিক?
- Lead time সাধারণত অনুরোধ গৃহীত হওয়া থেকে পৌঁছানো পর্যন্ত, cycle time কাজ শুরু থেকে শেষ পর্যন্ত; তবে দল-ভেদে সংজ্ঞা আলাদা হতে পারে
- Cycle time সবসময় lead time-এর চেয়ে বড়
- Lead time মানে প্রতি সপ্তাহে কতগুলো কাজ শেষ হয়
- দুটো সবসময় হুবহু একই জিনিস
একটি ticket-এর lead time ৫০ ঘণ্টা, যার মধ্যে কেউ সক্রিয়ভাবে কাজ করেছেন মোট ১০ ঘণ্টা। এর flow efficiency কত?
- ৮০%
- ৫০০%
- ২৫%
- ২০%
একটি feature branch তিন সপ্তাহ ধরে main-এ merge হয়নি, release-ও হয়নি। Poppendieck-দের software-এর সাতটি অপচয়ের মধ্যে এটি প্রধানত কোনটি?
- Extra features
- Partially done work
- Relearning
- Handoffs
কোন পরিস্থিতিতে একটি দলের পুরো board-এর (backlog-সহ) জন্য Little-এর সূত্র দিয়ে গড় lead time হিসাব করা সবচেয়ে কম নির্ভরযোগ্য?
- ছয় মাস ধরে প্রতি সপ্তাহে প্রায় সমান সংখ্যক card আসে ও শেষ হয়
- Card-গুলোর আকার ভিন্ন ভিন্ন, কিন্তু আগমন আর বিদায় সমান
- প্রতি সপ্তাহে যত card শেষ হয় তার চেয়ে বেশি আসে, আর backlog ক্রমাগত বাড়ছে
- দলটি WIP limit ব্যবহার করে
শব্দকোষ
লেখার মধ্যে ডটেড দাগ দেওয়া শব্দে মাউস রাখুন বা চাপুন — অর্থ দেখাবে। এই পর্বের সব নতুন শব্দ এখানে একসাথে:
মনে রাখুন
- Lean এসেছে Toyota Production System থেকে; software-এর সবচেয়ে বড় অপচয় অর্ধেক শেষ কাজ আর অপেক্ষা.
- Kanban-এর প্রাণ WIP limit আর pull: জায়গা খালি হলে তবেই নতুন কাজ; সীমা ছুঁলে নতুন শুরু নয়, চলমান কাজ শেষ।
- Lead time অনুরোধ থেকে পৌঁছানো, cycle time শুরু থেকে শেষ — কিন্তু ঘড়ির শুরু-শেষ বিন্দু সবসময় লিখে রাখুন।
- গড় cycle time = গড় WIP ÷ গড় throughput, শুধু স্থিতিশীল ব্যবস্থায় আর একই সীমানায়; প্রতিশ্রুতি দিন percentile দিয়ে।
- উন্নতি খুঁজুন অপেক্ষায় (flow efficiency), মানুষের গতিতে নয়; 5 whys আর retrospective-এ দোষী নয়, প্রক্রিয়া খুঁজুন।
আরও পড়ুন · ABCL TECH-এ আপনার পরবর্তী পদক্ষেপ
- পর্ব ০৭ · Version control কী — centralized বনাম distributed, Git-এর জন্ম আর setupপরবর্তী পর্বমডিউল ২ শুরু — Git দিয়ে কাজের ইতিহাস রাখা।
- পর্ব ০৫ · Agile আর Scrum — Agile Manifesto, role, event, artifact আর sprintআগের পর্বSprint, retrospective আর Definition of Done — Kanban-এর সাথে তুলনার জন্য।
- সফটওয়্যার ইঞ্জিনিয়ারিং ও Git · কোর্স হোম৭০টি পর্বপুরো কোর্সের রোডম্যাপ; পরের পর্ব ০৭ থেকে Git শুরু।
- System Design · Latency, throughput আর percentileগভীরে যানLittle-এর সূত্রের প্রমাণ, nearest-rank percentile আর ব্যস্ততা বাড়লে queue-এর বিস্ফোরণ।
- Operating Systems · Context switchপাশের ট্র্যাকCPU-ও কাজ বদলাতে খরচ দেয় — মানুষের মতোই।