সফটওয়্যার তৈরি করা অনেকটা জনসমক্ষে পারফরম্যান্স দেখানোর মতো মনে হতে পারে। ইন্টারনেট লঞ্চ, স্ক্রিনশট এবং চেঞ্জলগের বুলেট পয়েন্টগুলোকে পুরস্কৃত করে। তাই যখন একজন ডেভেলপার একটি প্রজেক্টে পুরো একটি সেশন ব্যয় করেন এবং দেখানোর মতো দৃশ্যমান কিছু থাকে না, তখন সহজাত প্রবৃত্তি হলো সেই দিনটিকে অপচয় বলা। Food Blog Platform-এর সাম্প্রতিক ডেভ লগ এর উল্টোটা প্রমাণ করে। সেখানে দেখানোর মতো কোনো নতুন রেসিপি ছিল না, কোনো নতুন ডিজাইন করা কার্ড ছিল না, বা ব্যবহারকারীদের ক্লিক করার জন্য অতিরিক্ত কোনো বাটন ছিল না। ছিল শুধু কোড যা ব্যবচ্ছেদ করা হয়েছে, পরীক্ষা করা হয়েছে এবং আগের চেয়ে আরও উন্নতভাবে পুনরায় সাজানো হয়েছে।
এটি সেই অদৃশ্য কাজ যা দীর্ঘমেয়াদী প্রজেক্টগুলোকে বাঁচিয়ে রাখে।
ফিচারগুলো মহিমা পায়; রিফ্যাক্টরিং প্রজেক্টকে সচল রাখে
যখন আপনি একটি ফুড ব্লগ প্ল্যাটফর্ম রক্ষণাবেক্ষণ করেন, তখন এর উপরিভাগ দেখতে খুব সহজ মনে হয়। ব্যবহারকারীরা রেসিপি পোস্ট করেন, ছবি আপলোড করেন এবং ক্যাটাগরি অনুযায়ী ব্রাউজ করেন। তবে এর গভীরে আপনি ইমেজ পাইপলাইন, উপকরণ এবং নির্দেশনার মধ্যে ডেটাবেস রিলেশনশিপ, সার্চ ইনডেক্স এবং ক্যাশিং লেয়ার সামলাচ্ছেন। সময়ের সাথে সাথে দ্রুত সমাধানের (quick fixes) স্তূপ জমে যায়। একটি হেল্পার ফাংশন যা তিনটি ভিন্ন ফাইলে কপি করা হয়েছে। একটি ডেটাবেস কুয়েরি যা দশটি পোস্টের জন্য ঠিক ছিল কিন্তু হাজারটি পোস্টের ক্ষেত্রে ধীরগতির হয়ে যায়। CSS যা গোছানো ছিল, কিন্তু পাঁচটি জরুরি প্যাচ করার পর তা একটি গোলকধাঁধায় পরিণত হয়েছে।
রিফ্যাক্টরিং মানে হলো সেই বিশৃঙ্খলাকে সরাসরি মোকাবিলা করা। এর মানে হতে পারে ডুপ্লিকেট লজিকগুলোকে একত্রিত করা যাতে একটি রেসিপি এডিটিং ফর্ম এবং একটি অ্যাডমিন ড্যাশবোর্ড আলাদা আলাদা ভার্সন বজায় না রেখে একই ভ্যালিডেশন লেয়ার থেকে তথ্য নেয়। এর মানে হতে পারে ইমেজ প্রসেসিং পদ্ধতিকে সহজ করা যাতে প্রতিবার পেজ রিলোড হওয়ার পরিবর্তে কম্প্রেশন রুটিনটি একবারই চলে। অথবা এটি কোডবেসকে এমনভাবে পুনর্গঠন করা হতে পারে যাতে পরবর্তীতে নতুন কোনো কন্টেন্ট টাইপ যোগ করতে ছয়টি অসংলগ্ন ডিরেক্টরি খুঁজতে না হয়।
এর কোনোটিই ইউজার ইন্টারফেসে দেখা যায় না। সাইটে আসা একজন ভিজিটর "query optimized" বা "component decoupled" লেখা কোনো ব্যানার দেখতে পাবেন না। কিন্তু সাইটটি দ্রুত লোড হলে তারা তা অনুভব করবেন। তারা লক্ষ্য করবেন যে একটি নতুন ফিচার অনুরোধ করার তিন সপ্তাহ পরে নয়, বরং তিন দিন পরেই চলে এসেছে। ডেভেলপার আজ নতুন কোনো সক্ষমতা যোগ করেননি। তিনি কেবল পথটি পরিষ্কার করেছেন যাতে কোডবেসের সাথে লড়াই না করেই নতুন সক্ষমতা যোগ করা যায়।
ক্লিন কোড হলো ভবিষ্যতের ব্যর্থতার বিরুদ্ধে একটি বিনিয়োগ
যে প্রজেক্ট এক মাসের বেশি স্থায়ী হয়, তাতে ঘর্ষণ (friction) বা জটিলতা জমা হতে থাকে। আপনি একটি ধারণা পরীক্ষা করার জন্য দ্রুত একটি প্রোটোটাইপ তৈরি করেন। তারপর ব্যবহারকারীরা আসতেই শুরু করে। তারপর আপনার একটি অথেন্টিকেশন লেয়ার প্রয়োজন হয়, তারপর একটি মডারেশন কিউ, এবং তারপর একটি মোবাইল লেআউট। এই প্রতিটি সংযোজন আগে থেকে বিদ্যমান কাঠামোর ওপর জোড়াতালি দিয়ে বসানো হয়। নিয়মিত রক্ষণাবেক্ষণ ছাড়া, আর্কিটেকচার এমন একটি বাড়ির মতো হতে শুরু করে যেখানে প্রতিটি নতুন ঘর এমন একজন মানুষের দ্বারা ডিজাইন করা হয়েছে যিনি কখনো মূল নকশাটি দেখেননি।
টেকনিক্যাল ডেট (Technical debt) কোনো শৃঙ্খলার অভাব নয়। এটি বাস্তব কিছু শিপ করার জন্য করা আপস বা ট্রেড-অফের একটি স্বাভাবিক উপজাত। বিপদ এটা নয় যে আপনার কোড নিখুঁত নয়। বিপদ হলো এটিকে এত দীর্ঘ সময় নিখুঁত না রাখা যে একটি ভেরিয়েবল পরিবর্তন করলে তিনটি অসংলগ্ন ফিচার ভেঙে যায়। আপনি সার্চ বার স্পর্শ করতে ভয় পাবেন কারণ গতবার চেষ্টা করার সময় ট্যাগ সিস্টেমটি ভেঙে গিয়েছিল। আপনি একটি মিল-প্ল্যানার উইজেট যোগ করা স্থগিত করবেন কারণ আপনি জানেন যে ডেটাবেস স্কিমা এমন একটি জট হয়ে গেছে যা খুলতে ঘণ্টার পর ঘণ্টা সময় লাগবে।
রিফ্যাক্টরিংয়ে একটি দিন ব্যয় করা মানে হলো সুদ আপনাকে ভাসিয়ে দেওয়ার আগেই সেই ঋণ পরিশোধ করা। এটি ছোট সমস্যাগুলোকে বড় সমস্যায় পরিণত হওয়া থেকে রোধ করে। যখন Food Blog Platform শেষ পর্যন্ত তার পরবর্তী বড় ফিচারটি যোগ করবে, তখন ডেভেলপারকে ভঙ্গুর কোড নিয়ে নাড়াচাড়া করতে হবে না। তিনি নতুন লজিক লিখবেন, সেটি একটি ক্লিন ইন্টারফেসে যুক্ত করবেন এবং এগিয়ে যাবেন। এটাই হলো বিনিয়োগের প্রতিদান (return on investment)।
ছোট পদক্ষেপ, প্রকৃত শিক্ষা
সফটওয়্যার ডেভেলপমেন্ট নিয়ে একটি পৌরাণিক কাহিনী প্রচলিত আছে যা বলে যে অগ্রগতি মানে হলো জিনিয়াস উদ্ভাবন এবং ম্যারাথন কোডিং সেশন যা রাতারাতি সবকিছু নতুন করে লিখে ফেলে। বেশিরভাগ কর্মরত ডেভেলপার আপনাকে বলবেন যে এটি একটি কল্পনা মাত্র। প্রকৃত অগ্রগতি হলো মঙ্গলবার বিকেলের একটি diff এর মতো, যেখানে তিনটি ফাংশন ছোট করা হয়েছে, একটি অপ্রয়োজনীয় ডিপেন্ডেন্সি সরানো হয়েছে এবং একটি বিভ্রান্তিকর ভেরিয়েবল নাম পরিবর্তন করা হয়েছে যাতে পরবর্তী পাঠক বুঝতে পারে এটি আসলে কী করে।
Food Blog Platform-এর ডেভ লগ এই ছন্দটিকে নিখুঁতভাবে ধারণ করে। সফটওয়্যার তৈরি করা মানে হলো ছোট, ধারাবাহিক উন্নতি। আপনি প্রতিটি চ্যালেঞ্জ থেকে শিখছেন। হয়তো আজ চ্যালেঞ্জ ছিল কেন একটি নির্দিষ্ট মডিউল অন্যটির ওপর এত বেশি নির্ভরশীল হয়ে পড়েছে তা বোঝা। হয়তো এটি উপলব্ধি করা যে দুই সপ্তাহ আগে নেওয়া একটি শর্টকাট ইতিমধ্যে সাশ্রয় করা সময়ের চেয়ে বেশি সময় নষ্ট করতে শুরু করেছে। প্রতিটি কমিট প্রজেক্টটিকে আরও উন্নত করে, এমনকি যখন সেই কমিটটি তৈরির চেয়ে বেশি কিছু মুছে ফেলে।
এই পদ্ধতিটি আপনার অনুপ্রেরণাকেও রক্ষা করে। বিশাল আকারের রিরাইট অত্যন্ত ক্লান্তিকর এবং ঝুঁকিপূর্ণ। এগুলো পুরনো বাগ সমাধানের সময় নতুন বাগ তৈরি করে। ইনক্রিমেন্টাল রিফ্যাক্টরিং, সম্পন্ন
