Technical debt: প্রোগ্রামারের দেনা

বিজনেস ফ্যাকাল্টি থেকে সদ্য পাশ করা মাহবুবের মাথাভর্তি কেবল আইডিয়া গিজগিজ করে। একেকটা আইডিয়া মাথায় আসে আর সেটাকে কিভাবে একটা সাকসেসফুল বিজনেসে নিয়ে যাওয়া যায় সেটা নিয়ে চিন্তা করতে করতে ওর নাওয়া খাওয়া শিকেয় ওঠে। কিছুদিন ভালোভাবে সেটা নিয়ে গুতাগুতি করার পর মনে হয়, ‘নাহ, এটা দিয়ে ভালো কিছু করা যাবে না, এটা বাদ ’। তারপর আবার শুরু হয় অন্য আইডিয়া নিয়ে কসরত। ওর ঘনিষ্ঠ বন্ধু শাফায়েত বেশ কিছুদিন আগেই একটা সফটওয়্যার কোম্পানীতে জয়েন করেছে। দুই বন্ধু মাঝেই মাঝেই আড্ডা দেয় আর ভাবে দুজনে মিলে একসাথে স্টিভ জবস আর স্টিভ ওজনিয়াকের মত একটা কোম্পানী দিতে পারলে মন্দ হতো না।

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

- কীরে ভাই, এই সাত সকালে আমার আরামের ঘুমটা মাটি করতে তুই কোত্থেকে আসলি?
- আরে বেটা ওঠ তাড়াতাড়ি। আমাদের গরীবী হালতের দিন শেষ। একটা সেই লেভেলের আইডিয়া পাইছি। আর কেউ শুরু করার আগেই এইটা নিয়ে কাজ শুরু করতে হবে। 
- (হাই তুলতে তুলতে) কি আইডিয়া?
- উবারের মত একটা এ্যাপ, কিন্তু এইটা হবে শুধুমাত্র রোগীদের জন্য সার্ভিস। আমাদের অনেকেই ডাক্তারের কাছে, হসপিটালে যাওয়ার জন্য ইমারজেন্সি ভালো কোনো গাড়ি, এম্বুলেন্স পাই না। আমাদের এই এপ দিয়ে আমরা সিএনজি, প্রাইভেটকার, এম্বুলেন্স যার যেইটা লাগে সেটার সাথে কানেক্ট করায় দিবো। এক সপ্তাহের মধ্যে এইটার জন্য এপ বানায় ফেলতে পারবি না? তাহলে সামনে একটা হ্যাকাথন আছে, ওইটায় প্রেজেন্ট করে ফান্ডিং ব্যবস্থা করা যাইত। (হড়হড় করে এক নিঃশ্বাসে বলে ফেললো কথাগুলো)
- আস্তে রে ভাই আস্তে, দম নে। ভালো আইডিয়া, কিন্তু এক সপ্তাহের মধ্যে তো বানানো কষ্ট। 
- পরে বানালে তো কোনো লাভ নাই। এক সপ্তাহের মধ্যেই লাগবে। তোরা যখন সফটওয়্যার বানাস তখন তোদের রিকোয়ারমেন্টের সাথে ডেডলাইন বলে দেয় না? মনে কর এইটাই তোর ডেডলাইন। 
- বাহ, আমার সাথে ঘুরে তো সফটওয়্যার ডেভেলপমেন্টের অনেক টার্মই শিখে গেছিস, এখন আবার আমার ওপর সেগুলো ফলাচ্ছিস। ভালো। বুঝলাম এটা আমার ডেডলাইন। ডেডলাইনের কথা যখন তুলেছিসই তখন তোকে একটা ব্যাপার বলি। 
- ব্যাপার স্যাপার পরে। আগে বল এক সপ্তাহে বানাতে পারবি কিনা?
- আগে শুনবি তো। 
- আচ্ছা বল। 
- আমাদেরকে প্রজেক্ট ম্যানেজার অনেক সময়ই এমন এক ফীচার ধরিয়ে দেয় কোড করার জন্য যেটার জন্য আসলে পর্যাপ্ত সময় হাতে থাকে না। মনে কর এই ফীচারটা করতে আমার এক সপ্তাহ সময় লাগবে, অথচ প্রজেক্ট ম্যানেজার বলছেন এটা ২ দিনে শেষ করতে হবে। 
- তখন তোরা কি করিস? গোঁজামিল দিয়ে কিছু একটা করে দিস? 
- এক্ষেত্রে আসলে আমার হাতে ২ টা উপায় থাকে। একটা হচ্ছে quick and dirty ওয়েতে ফীচারটা ইমপ্লিমেন্ট করে দেয়া যাতে করে বিজনেস রিকোয়ারমেন্টটা সময়মত সম্পন্ন করা যায়, আরেকটা হচ্ছে সময় নিয়ে ভেবে চিন্তে খুব ভালোভাবে ফীচারটা ইমপ্লিমেন্ট করা যাতে করে পরবর্তীতেও সেটা নিয়ে আমি বা অন্য কেউ কাজ করতে চাইলে কিংবা ওটার উপর নতুন ফীচার যুক্ত করতে চাইলে সহজে করতে পারি। 
- কিন্তু ভেবে চিন্তে সময় নিয়ে করতে গেলে তো ডেডলাইন ওভার হয়ে যাবে, শেষে তোর চাকরিই চলে যাবে। 
- হুম। এরকম পরিস্থিতিতে সাধারণত আমার প্রজেক্ট ম্যানেজারই বলে আপাতত quick ওয়েতেই করে দাও, পরে আমরা এই কোড রিফ্যাক্টর করবো। এই যে আমরা কাজটা করলাম এটাকে বলে ‘Technical Debt’. 
- Debt মানে ‘দেনা’? এই রকম নাম কেন? 
- কারণ দেখ, আমি এই যে আপাতত সহজ এবং দ্রুতভাবে কোডটা করে রাখলাম, আমি যদি এটা পরে ফিক্স না করি তাহলে এটার উপর নতুন ফীচার ইমপ্লিমেন্ট করতে গেলে আমার স্বাভাবিকভাবেই সময় ও পরিশ্রম বেশী করা লাগবে। কিন্তু যদি আমি এটার সলিউশনটা বেস্ট ওয়েতে করতাম তাহলে এটা নিয়ে পরে কাজ করা সহজ হতো। তারমানে আমি এখন এমন একটা ‘দেনা’ করে রাখলাম যেটা আমাকে পরে ‘শোধ’ করতে হবে। 
- যদি পরে এটা ফিক্স না করিস, তাহলে?
- সাধারণ দেনার ক্ষেত্রে কি হয়? তুই মনে কর কারো থেকে ধার করলি। তুই ইচ্ছা করলে তার ধার শোধ করতে পারিস আবার ইচ্ছা করলে নাও করতে পারিস। কিন্তু তুই যদি ধার শোধ না করিস, তাহলে বেশীরভাগ ক্ষেত্রেই সেটা সমস্যার সৃষ্টি করবে। ধর, তোর আবার একই রকম ধার করা লাগলো। এইভাবে তুই যদি ধারের উপর ধার করতেই থাকিস তাহলে এক সময় তুই দেনার দায়ে জর্জরিত হয়ে যাবি না? একইরকমভাবে আমি যদি এখন করা quick ওয়ে এর সলিউশন এর উপর আবারো এই রকম quick সলিউশন এপ্লাই করতে থাকি নিয়মিত তাহলে একটা সময় সেটা সুদে-আসলে এমন একটা পরিমাণে দাঁড়াবে যে অবস্থা পুরাই বেগতিক হয়ে যাবে। কিন্তু আমি যদি সময়মত আমার দেনাটা শোধ করে দিতাম, তাহলে কিন্তু এই প্রবলেম হতো না।
- কেউ কি এভাবে করে? মানে ফিক্স করে ফেলাই তো বেটার। 
- হুম, কিন্তু তারপরও অনেকেই এটা এভাবেই ফেলে রাখে। মনে করে, কাজ তো চলছে, প্রবলেম কি? 
- তারপরে কি হয়?
- কি আবার হবে? শেষ পর্যন্ত একটা সময় গিয়ে আর কোনো উপায় থাকে না, মানে জুতো ছিঁড়তে ছিঁড়তে এমন অবস্থা হয় যে জোড়াতালি দেয়ার আর জায়গাও থাকে না। তখন পুরো কোডবেজ আবার নতুন করে শুরু থেকে রি-মেক করা লাগে। পুরাই বিতিকিচ্ছিরি অবস্থা। সময়, শ্রম সব মিলিয়ে কয়েকগুণ বেশী খরচ বেড়ে যায় প্রজেক্টের।
- আচ্ছা, বুঝলাম। তাহলে সবসময়ই তো সময় নিয়ে চিন্তা করে কাজ করা ভালো। এই রকম quick সলিউশন না করলেই তো হয়। 
- তা ভালো। কিন্তু ভেবে দেখ তো, ব্যবসায়ীরা ব্যাংক থেকে লোন নেয় কেনো? কারণ মনে কর তুই কোনো একটা ব্যবসায় নামবি কিন্তু তার জন্য তোর বড় একটা পুঁজি দরকার। এতো টাকা তো তোর হাতে নেই। তুই যদি ব্যাংক থেকে লোন নিয়ে ব্যবসাটা শুরু করিস, তাহলে আস্তে আস্তে ব্যাংকের লোনও শোধ করতে পারবি, তোর ব্যবসাটাও দাঁড় করাতে পারবি। এরকম অবস্থায় ব্যাংক থেকে লোন নেয়াটাই বেটার না? 
- হুম, ভালো বলেছিস। এই অবস্থায় এটাই ভালো ওয়ে। তবে ঐ যে, সময়মত ব্যাংকের লোন শোধ না করলে কিন্তু দেউলিয়া হয়ে যাওয়া লাগবে। 
- ইয়েস মাই ফ্রেন্ড, নাউ ইউ গট ইট। 
- কিন্তু এতো যে পটর পটর করলি, এটার সাথে আমার বিজনেস আইডিয়ার কি সম্পর্ক?
- আছে, বন্ধু আছে। এই যে তুই আমাকে বলছিস তোর প্রজেক্টটা এক সপ্তাহে করে দিতে, এখন এই অবস্থায় আমার একটাই উপায় আছে, সেটা হলো ‘Technical Debt’ নেয়া। তা না হলে এটা এক সপ্তাহে করা সম্ভব না। 
- ও আচ্ছা। এই তাহলে কাহিনী। ঠিক আছে। যেহেতু আমাদের হাতে এখন আর কোনো উপায় নেই, ‘ধার’ না হয় আমরা নিলাম। কিন্তু মনে রাখিস, সত্যি সত্যি যদি এটার জন্য ফান্ডিং পাই আর বিজনেস শুরু করি, তাহলে কিন্তু এই ধার শোধ করার দায়িত্ব তোর। কারণ আমি এইসব কোডিং ফোডিং বুঝি না, আর আমাদের ভবিষ্যৎ Orange Inc. এর তুই CTO. 
- হা হা, ঠিক ঠিক আছে। সেটা কোনো সমস্যা না। 
- আচ্ছা, এখন বল কখন কাজ শুরু করবি ? 
- আরে বাবা, খালি পেটে কোড আসবে ? আগে নাস্তা করতে দিবি তো। তারপরেই কোমর বেঁধে কাজে নেমে পড়ছি CEO সাহেব। 
- ঠিক আছে। ভালোভাবে যাতে কাজ করিস সেজন্য চল তোকে বাইরে থেকে ভুরিভোজ করিয়ে আনি। 
- এই না হলে CEO. চল চল।