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

ফ্রেমওয়ার্ক রীতিমালা হলো সেই “ডিফল্ট করার উপায়” যা একটি ফ্রেমওয়ার্ক নীরবে উৎসাহিত করে—বা স্পষ্টভাবে প্রত্যাশা করে। প্রতিটি টিম নিজে থেকে ফোল্ডার লেআউট, নামকরণ বা অনুরোধ/প্রতিক্রিয়া ফ্লো বানানোর পরিবর্তে, ফ্রেমওয়ার্ক একটি শেয়ার্ড প্যাটার্ন দেয়। আপনি যদি তা মেনে চলেন, অন্যান্য ডেভেলপাররা দীর্ঘ ব্যাখ্যার প্রয়োজন ছাড়া অনুমান করে নিতে পারে কোথায় কী আছে এবং কীভাবে কাজ করে।
সাধারণত ডকুমেন্টেশন লেখা হয় কারণ মানুষ ডকস লিখতে ভালোবাসে—এটা নয়। ডকুমেন্টেশনের উদ্দেশ্যগুলো কয়েকটি পুনরাবৃত্ত問題 সমাধান করা:
কনভেনশন প্রথম দুইটি বিশেষভাবে ভালোভাবে হ্যান্ডেল করে। যখন “X কোথায় বসাবো” এবং “Y কীভাবে নাম দেব” ফ্রেমওয়ার্ক ইতিমধ্যেই সিদ্ধান্ত নেয়, তখন ব্যাখ্যার প্রয়োজন এবং বিতর্ক কমে যায়।
“কনভেনশন ডকুমেন্টেশন বদলে দেয়” মানে প্রজেক্ট ডকুমেন্টেশনের বাইরে চলে যাচ্ছে—এটা মানে নয় যে প্রজেক্ট ডকুমেন্টেশন থাকবে না। এর মানে হলো বেসিক নির্দেশনার একটি বড় অংশ prose থেকে predictable structure-এ চলে যায়। উইকি পেজ পড়ার পরিবর্তে আপনি অনুমান করে ফেলেন কারণ ফ্রেমওয়ার্ক প্রত্যাশা করে যে কন্ট্রোলারগুলো একটি নির্দিষ্ট জায়গায় থাকবে (এবং টুল, জেনারেটর, এবং উদাহরণগুলো সেটাকে পুনরায় জোর দেয়)।
ফলাফল: স্পষ্ট যে বিষয়গুলো সম্পর্কে ডক কম লাগে, এবং প্রকল্প-নির্দিষ্ট জিনিসগুলো—বিজনেস রুল, অস্বাভাবিক আর্কিটেকচার পছন্দ, এবং ইচ্ছাকৃত ব্যতিক্রম—কথা বলার দিকে বেশি ফোকাস থাকে।
এই আর্টিকেলটি ডেভেলপার, টেক লিড, এবং প্রোডাক্ট-মাইন্ডেড টিমদের জন্য যারা বিস্তৃত ডকস না চালিয়ে পরিষ্কার কোডবেস এবং দ্রুত অনবোর্ডিং চায়।
আপনি জানবেন কিভাবে ফ্রেমওয়ার্ক রীতিমালা “অপ্রকাশ্য ডকুমেন্টেশন” তৈরি করে, কনভেনশন সাধারণত কী কী স্ট্যান্ডার্ড করে, কোথায় কনভেনশন কাজ করা বন্ধ করে দেয়, এবং কোন বিষয়গুলো স্পষ্টভাবে ডকুমেন্ট করা জরুরি—তাতে স্পষ্টতা বাড়ে যদিও ডক কমে।
“কনভেনশন ওভার কনফিগারেশন” মানে ফ্রেমওয়ার্ক আপনার জন্য সংবেদনশীল সিদ্ধান্ত নেবে—যতক্ষণ না আপনি এর চুক্তিভিত্তিক নিয়মগুলো মেনে চলেন। পৃষ্ঠপোষকতার বেশিরভাগ সেটআপ নির্দেশনা লেখার (এবং পড়ার) পরিবর্তে, টিমগুলো শেয়ার্ড ডিফল্টগুলোর ওপর নির্ভর করে যা সবাই স্বীকৃত।
এটা এমন দেশে গাড়ি চালানোর মতো মনে করুন যেখানে সবাই ডানদিকেই চলে, লাল বাতি দেখলে থামে, এবং স্ট্যান্ডার্ড সাইন মানে সবাই জানে।
আপনি পারতেন প্রতিটি চৌরাস্তার জন্য বিস্তারিত ম্যানুয়াল লিখতে (“লাল আঠভুজ আকৃতির সাইন দেখা গেলে থামুন; সবুজ হলে যান…”), কিন্তু দরকার হয় না—কারণ কনভেনশন ইতিমধ্যেই জানা এবং নিয়মিতভাবে প্রযোজ্য।
ফ্রেমওয়ার্ক কনভেনশনও একইভাবে কাজ করে: তারা “এখানে আমরা কীভাবে কাজ করি” কে predictable আচরণে পরিণত করে।
যখন একটি ফ্রেমওয়ার্কের ডিফল্ট থাকে, আপনি প্রতিটি ক্ষুদ্র সিদ্ধান্ত ডকুমেন্ট করার প্রয়োজন নেই। ফ্রেমওয়ার্ক (এবং আপনার টিম) নিম্নলিখিত প্যাটার্নগুলো অনুমান করতে পারে:
User মডেল users ডেটার সাথে মিলবে)এই শেয়ার্ড বেসলাইন ডকুমেন্টেশনকে ছোট করে দেয়: “এখানে X সেটআপ করার প্রতিটি ধাপ” থেকে “আমরা ফ্রেমওয়ার্ক ডিফল্ট মেনে চলি, যেখানে উল্লেখ আছে সেটাই আলাদা” তে নামিয়ে আনে। অনবোর্ডিংয়ের মানসিক বোঝাও কমে: নতুন ডেভেলপাররা অনেক বেশি সঠিক অনুমান করতে পারে, কারণ কোডটি তাদের অন্য প্রকল্পে দেখার সাথে মেলে।
কনভেনশনেরও মূল্য আছে। কিছু ক্ষেত্রে আপনি অস্বাভাবিক ফোল্ডার স্ট্রাকচার, কাস্টম নামকরণ, বা উচ্চমাত্রার bespoke ওয়ার্কফ্লো হারিয়ে ফেলতে পারেন।
উপকার হলো ধারাবাহিকতা: কম বিতর্ক, কম বিস্ময়, কম “ট্রাইবাল নলেজ” নিয়ম যা শুধুমাত্র দীর্ঘকালীন সদস্যরা মনে রেখেই। টিমগুলো দ্রুত চলে কারণ তারা ব্যাখ্যায় কম সময় ব্যয় করে এবং তৈরিতে বেশি সময় দেয়।
একটি কনভেনশন কেবল তখনই ডকুমেন্টেশন বাঁচায় যখন মানুষ ইতোমধ্যেই তা জানে—বা একবার শিখে বারবার ব্যবহার করতে পারে।
এই কারণেই জনপ্রিয় ফ্রেমওয়ার্ক শক্তিশালী: কনভেনশনগুলি ব্যাপকভাবে শেখানো, ব্যাপকভাবে ব্যবহৃত, এবং বহু কোডবেসে পুনরাবৃত্ত। যখন আপনার প্রকল্প সেই শেয়ার্ড ডিফল্টগুলোর কাছে থাকে, আপনার কোড স্বাভাবিকভাবেই বোঝা যায়, খুব কম লিখিত ব্যাখ্যার দরকার পড়ে।
কনভেনশন হলো শেয়ার্ড শর্টকাট। তারা প্রতিটি নতুন সহকর্মীর প্রথম দিনের সাধারণ প্রশ্নগুলো স্ট্যান্ডার্ড করে: “এটা কোথায় যাবে?” এবং “এটি কী নামে হবে?” যখন সেই উত্তরগুলো অনুমেয় হয়, আপনি পেজের ডকুমেন্টগুলো অনেক কমিয়ে দিতে পারেন।
অধিকাংশ ফ্রেমওয়ার্ক একটি পরিচিত প্রজেক্ট স্ট্রাকচার চাপ দেয়: UI-এর জন্য একটি জায়গা, রoutes-এর জন্য একটি জায়গা, ডেটা অ্যাক্সেসের জন্য একটি জায়গা, টেস্টের জন্য একটি জায়গা। এই ধারাবাহিকতা গুরুত্বপূর্ণ কারণ মানুষ একটি গাইড না পড়েও “পেজ রেন্ডার করে এমন অংশ” বনাম “ডেটাবেসে কথা বলা অংশ” খুঁজে পেতে পারে।
সেরা কনভেনশনগুলো সাধারণ টাস্কগুলোকে মাংসপেশির স্মৃতি বানায়: নতুন স্ক্রিন যোগ করলে, আপনি ইতিমধ্যেই জানেন কোন ফোল্ডারে যাবে।
নামকরণ নিয়মগুলো এমন ব্যাখ্যার প্রয়োজন কমায়: “আমাদের কন্ট্রোলারগুলো X-এ এবং Y-তে ওয়্যার করা দরকার”। পরিবর্তে, নামগুলো থেকেই ভূমিকা বোঝা যায়।
সাধারণ উদাহরণ:
অনেক ওয়েব ফ্রেমওয়ার্ক ফাইলগুলোকে রাউটে ম্যাপ করে (বা রাউটগুলো অনুমান করা সহজ করে)। যদি আপনি ফাইলনেম থেকে URL অনুমান করতে পারেন—অথবা উল্টো—তাহলে প্রতিটি ফিচারের জন্য আলাদা রাউটিং ডকুমেন্টের দরকার পড়ে না।
কনভেনশন ডাইনামিক রাউট, নেস্টেড রাউট, এবং 404 হ্যান্ডলিং সম্পর্কেও প্রত্যাশা সেট করে, তাই “নতুন এন্ডপয়েন্ট কীভাবে যোগ করব?” একটি স্ট্যান্ডার্ড উত্তর পায়।
কনভেনশন প্রায়ই নির্ধারণ করে কোথায় “ডেটা কোড” থাকবে: মডেল, রিপোজিটরি, সার্ভিস, মাইগ্রেশন, স্কিমা ফাইল। আপনার অ্যাপ যতই ছোট হোক না কেন, ডেটা অ্যাক্সেসের একটি সম্মত জায়গা থাকলেই UI কোড জুড়ে জুড়ে এড-হক ডাটাবেস কল ছড়িয়ে পড়ে না।
স্ট্যান্ডার্ড কমান্ড (run, test, build, lint, format) অস্পষ্টতা দূর করে। একটি নতুন ডেভেলপারকে প্রজেক্ট চালাতে উইকি পেজের দরকার হওয়া উচিত নয়—npm test (অথবা সমতুল্য) হওয়া উচিৎ স্পষ্ট প্রথম পদক্ষেপ।
যখন এই পাঁচটি এলাকা ধারাবাহিক থাকে, কোডবেস নিজেই বেশিরভাগ “এখানে আমরা কীভাবে করে থাকি?” প্রশ্নের উত্তর দেয়।
একটি "সবকিছু কীভাবে কাজ করে" উইকি পুরো সিস্টেমকে prose-এ ব্যাখ্যা করার চেষ্টা করে। এটা প্রায়ই শুরুতে ব্যবহারযোগ্য হয়, তারপর ফোল্ডার সরানো, নাম পরিবর্তন, এবং নতুন ফিচার আসার সঙ্গে আপডেট না হওয়ায় পুরানো হয়ে যায়। কনভেনশন সেই ধারণাটিকে উল্টে দেয়: দীর্ঘ ব্যাখ্যা পড়ার বদলে, আপনি স্ট্রাকচার পড়েন।
যখন একটি ফ্রেমওয়ার্ক (এবং আপনার টিম) কোন জিনিস কোথায় থাকে সেই বিষয়ে একমত হয়, রিপোজিটরি একটি সিটি গ্রিডের মতো নেভিগেবল হয়।
আপনি যদি জানেন UI কম্পোনেন্টগুলো components/ এ যায়, পেজ-লেভেল ভিউগুলো pages/ এ যায়, এবং API হ্যান্ডলারগুলো api/ তে থাকে, আপনি আর “X কোথায়?” প্রশ্নটি করবেন না কারণ প্রথম অনুমানটি সাধারণত সঠিক। এমনকি যখন তা সঠিক না হয়, আপনার সার্চ সীমাবদ্ধ: এটা যেখানে-ই-হোক-না—এটি কয়েকটি প্রত্যাশিত জায়গার একটায়।
কনভেনশন ফাইলনেম ও সিম্বলগুলোকে অর্থবহ করে তোলে। একটি নতুন ব্যক্তি লোকেশন ও নামকরণ থেকে আচরণ অনুধাবন করতে পারে:
user.controller নামক ফাইল সম্ভবত রিকোয়েস্ট লজিক হ্যান্ডেল করবেUserService ক্লাস সম্ভবত বিজনেস রুল রাখেmigrations/ নামক ফোল্ডার সম্ভবত অর্ডার্ড, একবার রান করার ডাটাবেস পরিবর্তন রাখেএই অনুমানগুলো “আর্কিটেকচার ব্যাখ্যা করুন” প্রশ্নগুলোকে ছোট, উত্তরযোগ্য প্রশ্নে নামিয়ে আনে (“এই সার্ভিস কি সরাসরি ডেটাবেস কল করতে পারে?”), যা ডকুমেন্ট করা সহজ।
মানচিত্রকে দ্রুত শক্ত করার দ্রুততম উপায় হল স্ক্যাফোল্ডিং। স্টার্টার টেমপ্লেট এবং জেনারেটর নতুন ফিচারগুলো ডিফল্টভাবে “ঠিক” আকারে তৈরি করে—ফোল্ডার, ফাইলনেম, বয়লারপ্লেট ওয়্যারিং, এবং প্রায়ই টেস্ট।
এটা গুরুত্বপূর্ণ কারণ কনভেনশন তখনই সাহায্য করে যখন সেগুলো ধারাবাহিকভাবে প্রয়োগ করা হয়। একটি টেমপ্লেট একটি গার্ডরেল: এটি প্রতিটি নতুন রুট, কম্পোনেন্ট, বা মডিউলকে প্রত্যাশিত স্ট্রাকচারের দিকে ঠেলে দেয়, ফলে কোডবেসটি উইকি পেজ ছাড়াই পাঠযোগ্য থাকে।
আপনি যদি অভ্যন্তরীণ স্ক্যাফোল্ড বজায় রাখেন, /docs/getting-started মত একটি সংক্ষিপ্ত অনবোর্ডিং পেজ থেকে তাদের লিংক করুন এবং ফোল্ডার ট্রি বাকিটা করবে।
ফ্রেমওয়ার্ক কনভেনশন প্রায়ই নীরব,builtin নির্দেশনার মতো কাজ করে। “কোথায় জিনিসগুলো রাখবেন” বা “কীভাবে ওয়্যার আপ করবেন” বোঝানোর একটি পেজ লেখার বদলে, ফ্রেমওয়ার্ক ইতিমধ্যেই সিদ্ধান্ত নেয়—এবং টিম সেটা পড়ে শিখে নেয়।
Rails “কনভেনশন ওভার কনফিগারেশন” এর জন্য বিখ্যাত। একটি সহজ উদাহরণ: আপনি যদি OrdersController নামে একটি কন্ট্রোলার তৈরি করেন, Rails অনুমান করবে যে একটি মিল রাখা ভিউ ফোল্ডার app/views/orders/ আছে।
একটি কনভেনশন অনেক ডকুমেন্ট প্রতিস্থাপন করতে পারে যা না হলে ব্যাখ্যা করত:
ফলাফল: নতুন সহকর্মী ফোল্ডার প্যাটার্ন অনুসরণ করে একটি পেজ যোগ করতে পারে, “এই ফাইল কোথায় যাবে?” জিজ্ঞাসা না করেই।
Django একটি ধারাবাহিক “অ্যাপ” স্ট্রাকচার উৎসাহিত করে। কেউ যখন একটি Django অ্যাপ দেখে, তারা আশা করে models.py-তে ডেটা শেপ, views.py-তে রিকোয়েস্ট হ্যান্ডলিং, এবং templates/-এ HTML পাওয়া যাবে।
আপনি একটি দীর্ঘ গাইড লিখতে পারতেন আপনার প্রজেক্টের অ্যানাটমি ব্যাখ্যা করতে, কিন্তু Django-র ডিফল্টগুলো ইতিমধ্যেই তা শেখায়। যখন কেউ পেজ কিভাবে দেখবে বদলাতে চায়, তারা জানতে পারে templates/ দেখতে হবে। ডেটা সমন্বয় করতে হলে models.py-এ শুরু করবে।
ফলাফল: দ্রুত ফিক্স, কম হান্টিং টাইম, কম “কোন ফাইল এটা নিয়ন্ত্রণ করে?” প্রশ্ন।
Next.js ফোল্ডার স্ট্রাকচারকে রাউটিং-এ সরাসরি প্রতিফলিত করে রাউটিং ডকুমেন্ট কমিয়ে দেয়। app/about/page.tsx (অথবা পুরোনো সেটআপে pages/about.tsx) ফাইল তৈরি করলে আপনি স্বয়ংক্রিয়ভাবে /about পেজ পান।
এটা ডকুমেন্টের প্রয়োজন অপসারণ করে যা ব্যাখ্যা করত:
ফলাফল: অনবোর্ডিং সহজ—মানুষ ডিরেক্টরি দেখে ওয়েবসাইটের আকার আবিষ্কার করতে পারে।
Rails, Django, এবং Next.js আলাদা দেখায়, কিন্তু নীতি একই: শেয়ার্ড ডিফল্টগুলো প্রজেক্ট স্ট্রাকচারকে নির্দেশনায় পরিণত করে। যখন সবাই একই কনভেনশন বিশ্বাস করে, কোডবেস নিজেই অনেক “এখানে আমরা কীভাবে করি?” প্রশ্নের উত্তর দেয়—অতিরিক্ত একটি ডকুমেন্ট ছাড়া।
ফ্রেমওয়ার্ক কনভেনশন কাজ করলে সেগুলো “অদৃশ্য” মনে হয়। আপনি অনুমান করতে পারেন কোথায় ফাইলগুলি আছে, কীভাবে নামকরণ করা হয়, এবং একটি রিকোয়েস্ট অ্যাপ দিয়ে কীভাবে যায়। বিভ্রান্তি ফিরে আসে যখন কোডবেস ঐ শেয়ার্ড ডিফল্ট থেকে সরে যায়।
কিছু প্যাটার্ন শুরুর দিকে দেখা যায়:
UserService, অন্যে UsersManager, আরেকটি user_serviceএসব স্বয়ংক্রিয়ভাবে ভুল নয়—কিন্তু তারা মানে নতুন সহকর্মী আর ফ্রেমওয়ার্কের “মানচিত্র” উপর নির্ভর করতে পারবে না।
অধিকাংশ কনভেনশন ভাঙা একটি যুক্তিযুক্ত স্থানীয় অপ্টিমাইজেশান দিয়ে শুরু হয়: “এই ফিচারটি বিশেষ, তাই আমরা এটাকে এখানে রাখব” বা “এই নামটি পড়তে ভালো লাগে।” সমস্যা হলো ব্যতিক্রম সংক্রামক। প্রথম ব্যতিক্রম শিপ হলে, পরবর্তী ডেভেলপার এটাকে প্রিসিডেন্ট হিসেবে ধরে:
শীঘ্রই আপনার কাছে একই কাজ করার তিনটি “গ্রহণযোগ্য” উপায় থাকে
এই অবস্থায় কনভেনশন আর কনভেনশন থাকে না—এটা ট্রাইবাল নলেজে পরিণত হয়।
কনভেনশন ঝাপসা হলে অনবোর্ডিং ধীর হয়ে যায় কারণ মানুষ আর অনুমান করতে পারে না কোথায় দেখতে হবে। প্রতিদিনকার কাজগুলো বেশি সময় নেয় (“এই ফোল্ডারগুলোর মধ্যে কোনটা আসল?”), এবং ভুল বেড়ে যায় (ভুল মডিউল ওয়্যার করা, ভুল নামকরণ করা, লজিক ডুপ্লিকেট করা)। টিমগুলো কম্পেন্সেট করতে বেশি সেনক/মিটিং, দীর্ঘ PR ব্যাখ্যা, এবং স্টেল হওয়া “কুইক ডকস” যোগ করে।
যেখানে একটি স্পষ্ট কারণ আছে সেখানে কাস্টমাইজ করুন—আর একটি লিখিত নোট রাখুন।
নোটটি হালকা হতে পারে: অদ্ভুত স্ট্রাকচারের কাছে একটি ছোট মন্তব্য, অথবা /docs/decisions পেজে সংক্ষিপ্ত এন্ট্রি যা ব্যাখ্যা করে কী বদলেছে, কেন এটা মূল্যবান, এবং ভবিষ্যতে কি স্ট্যান্ডার্ড হওয়া উচিত।
ফ্রেমওয়ার্ক কনভেনশন পেজের অনেক ব্যাখ্যা সরিয়ে দিতে পারে, কিন্তু তারা দায়িত্বকে সরায় না। সেই অংশগুলোই ডকুমেন্ট করা উচিত যেখানে আপনার প্রকল্প ইচ্ছাকৃতভাবে সাধারণ ধারনা থেকে ভিন্ন।
স্ট্যান্ডার্ড ফ্রেমওয়ার্ক আচরণ পুনরায় ব্যাখ্যা করতে টাল দিন। বদলে, সেই সিদ্ধান্তগুলো ক্যাপচার করুন যা মানুষের দৈনন্দিন কাজকে প্রভাবিত করে:
উদাহরণ: “আমরা /src/features-এ ফিচার ফোল্ডার ব্যবহার করি লেয়ার ফোল্ডারের (/src/components, /src/services) পরিবর্তে কারণ মালিকানা টিমের সঙ্গে মানানসই হয় এবং ক্রস-টিম কাপলিং কমায়।” এই এক লাইন সপ্তাহের ধীরগতিকে প্রতিরোধ করে।
যখন একটি ব্যতিক্রম স্থানীয়ভাবে গুরুত্বপূর্ণ, সেই নোটটি স্থানীয়ভাবে রাখুন। একটি ছোট README.md ফোল্ডারের ভিতরে, বা ফাইলের শীর্ষে একটি সংক্ষিপ্ত হেডার কমেন্ট প্রায়ই একটি কেন্দ্রীয় উইকি-র চেয়ে ভালো।
ভাল প্রার্থ্য:
এই নোটগুলো সংক্ষিপ্ত এবং বাস্তবমূলক রাখুন: কীটা আলাদা, কেন আলাদা, এবং পরবর্তী কী করা উচিত।
একটি হালকা পেজ (প্রায়ই /docs/project-rules.md বা রুট README) রাখুন যা কেবল 5–10টি মূল পছন্দ তালিকাভুক্ত করে যা মানুষ সমস্যায় পড়বে:
এটা পূর্ণ ম্যানুয়াল নয়—কেবল শেয়ার্ড গার্ডরেল।
কনভেনশন থাকলেও অনবোর্ডিং আটকে যায় যখন মানুষ অ্যাপ চালাতে পারে না। একটি সংক্ষিপ্ত “How to run/test” অংশ যোগ করুন যা স্ট্যান্ডার্ড কমান্ড এবং আপনার প্রকৃত সেটআপের সাথে মিলে।
যদি কনভেনশনারি কমান্ড npm test হয় কিন্তু আপনার প্রজেক্টে npm run test:unit লাগে, তা স্পষ্টভাবে ডকুমেন্ট করুন।
ডকুমেন্টেশন তখনই সঠিক থাকে যখন সেটিকে চেঞ্জের অংশ হিসেবে দেখা হয়। রিভিউতে জিজ্ঞাসা করুন: “এটা কি একটি নতুন ব্যতিক্রম এনেছে?” যদি হ্যাঁ হয়, একই pull request-এ সংশ্লিষ্ট নোট (লোকাল README, Project Rules, বা রুট কুইকস্টার্ট) জরুরি করুন।
যদি কনভেনশন আপনার কোডবেসের “শেয়ার্ড ডিফল্ট” হয়, অটোমেশনই সেগুলোকে বাস্তবে রূপ দেয়। প্রতিটি ডেভেলপারকে উইকি মনে রাখাতে বলার বদলে, আপনি নিয়মগুলো executable করে দেন—তাহলে প্রজেক্ট নিজেই নিজেকে এনফোর্স করে।
একটি ভালো সেটআপ ড্রিফটকে দ্রুত এবং মৃদুভাবে ধরবে:
*.spec.ts, describe/it শব্দচয়ন, বা প্রয়োজনীয় Assertion-গুলি বাধ্যতামূলক করা যাতে টেস্টগুলো একরকম পড়েএই চেকগুলো “দয়া করে মনে রাখবেন” ধাঁচের প্যারাগ্রাফগুলোর বদলে সরল ফলাফল দেয়: কোড কনভেনশনের সাথে মিলে না, অথবা মেলে।
অটোমেশন উজ্জ্বল হয় কারণ এটি দ্রুত ব্যর্থ করে:
সেরা রুল সেটগুলো ছোট এবং নিস্তরঙ্গ। ফ্রেমওয়ার্কের ডিফল্ট দিয়ে শুরু করুন, তারপর কেবল সেইগুলো যোগ করুন যা স্পষ্টতা রক্ষা করে (নামকরণ, স্ট্রাকচার, বাউন্ডারি)। প্রতিটি নতুন রুল একটি আরেকটা জিনিস মানুষকে বুঝতে হবে, তাই নতুন চেকগুলোকে কোডের মতো বিবেচনা করুন: যখন সেগুলো একটি পুনরাবৃত্ত সমস্যা সমাধান করে যোগ করুন, এবং যখন আর সাহায্য না করে তখন মুছে ফেলুন।
যখন কোডবেস ফ্রেমওয়ার্ক কনভেনশন মেনে চলে, টেস্ট কেবল “চলছে কি না” প্রমাণ করার থেকেও বেশি করতে পারে। সেগুলো পার্শ্ববর্তী বাস্তব ভাষায় সিস্টেম কীভাবে আচরণ করা উচিত তা ব্যাখ্যা করতে পারে—ঠিক বাস্তবায়নের পাশেই।
একটি ব্যবহারযোগ্য নিয়ম: একটি টেস্ট এক আচরণ end-to-end বর্ণনা করুক। যদি কেউ টেস্টের নাম ঝটপট পড়ে সিস্টেম কী প্রতিশ্রুতি দেয় তা বুঝতে পারে, আপনি আলাদা ডকামের প্রয়োজন কমিয়েছেন।
ভাল টেস্টগুলো সাধারণত একটি সরল ছন্দ অনুসরণ করে:
আরো ভালো হয় যখন নাম ব্যবহারকারী-ইচ্ছার প্রতিফলন:
signing_in_with_valid_credentials_redirects_to_dashboardcheckout_fails_when_shipping_address_is_missingএই নামগুলো এমন “ডকুমেন্ট” যা ভুল হলে টেস্ট ফেল করে—এবং তাই ভুলগুলো মেলে।
অ্যাকসেপ্টেন্স (বা ফিচার) টেস্টগুলো পণ্যের দিক থেকে কীভাবে আচরণ করে তা বর্ণনা করতে দারুণ।
উদাহরণ আচরণ যা অ্যাকসেপ্টেন্স টেস্ট বর্ণনা করতে পারে:
এই টেস্টগুলো “আমি X করলে কী হয়?” প্রশ্নের উত্তর দেয়—প্রায়শই নতুন সহকর্মীর প্রথম দরকার।
ইউনিট টেস্টগুলো তখনই দারুণ যখন আপনাকে “ছোট কিন্তু গুরুত্বপূর্ণ” নিয়মগুলো ডকুমেন্ট করতে হয়:
এগুলো সেই নিয়মগুলোর জন্য বিশেষভাবে মূল্যবান যখন নিয়মটি ফ্রেমওয়ার্ক কনভেনশনে স্পষ্ট নয়।
নমুনা ডেটাও জীবন্ত ডকুমেন্টেশন হতে পারে। একটি ছোট, ভালো নামকৃত ফিক্সচার (উদা: user_with_expired_subscription) ডোমেইন শেখায় উইকি-র অনুচ্ছেদের তুলনায় দ্রুত।
কী গুরুত্বপূর্ণ: সংযম—ফিক্সচারগুলোকে সংক্ষিপ্ত, পাঠযোগ্য, এবং এক অভিপ্রায়বোধক রাখুন, যাতে সেগুলো বিশ্বাসযোগ্য উদাহরণ থাকে, আরেকটি আলাদা সিস্টেম হয়ে না যায়।
স্টার্টার টেমপ্লেট (এবং তাদের পিছনের জেনারেটর) “এখানে আমরা কীভাবে করি” কে লোকজন বাস্তবে অনুসরণ করার জন্য দ্রুততম উপায়। প্রতিটি টিম সদস্যকে সঠিক ফোল্ডার, স্ক্রিপ্ট, এবং টুলিং মনে রাখার অপেক্ষা না করিয়ে, আপনি সেই সিদ্ধান্তগুলোকে একটি রিপোতে বেক করে দিতে পারেন যা সঠিকভাবে শুরু করে।
উপরে তিনটি কনভেনশনগত দায় কমায় কারণ কনভেনশনগুলো স্টার্টিং পয়েন্টে এনকোড করা থাকে, উইকি-তে না যা ড্রিফট করে।
প্রায়োগিকভাবে, এখানেই Koder.ai মতো টুলগুলো সহায়তা করতে পারে: যখন আপনি একটি নতুন React অ্যাপ, Go ব্যাকএন্ড, PostgreSQL স্কিমা, বা Flutter ক্লায়েন্ট জেনারেট করেন একটি চ্যাট-চালিত ওয়ার্কফ্লো থেকে, আপনি ডিফল্ট আউটপুটকে আপনার কনভেনশনের সাথে মেলিয়ে টিমগুলোকে একটি “গোল্ডেন পাথ” এ রাখতে পারেন (তারপর সোর্স কোড রিপোতে এক্সপোর্ট করতে পারেন)।
অনবোর্ডিংয়ের সবচেয়ে বড় বিভ্রান্তি বাণিজ্যিক লজিক নিয়ে নয়—এটা কোথায় জিনিস থাকে এবং কীভাবে চালাতে হয়। একটি ভালো টেমপ্লেট সাধারণ টাস্কগুলোকে প্রতিটি রিপোতে একই করে তোলে: একই স্ক্রিপ্ট, একই ফোল্ডার নাম, একই চেক কমান্ড, একই PR প্রত্যাশা।
কমপক্ষে সম্মত হোন:
/src, /test, /docs যেখানে কেবল ব্যতিক্রম)এটি ছোট রাখুন যাতে টিমগুলো স্কিপ না করে:
install + dev)test, lint, এবং format স্ক্রিপ্টবড় ঝুঁকি হলো পুরনো টেমপ্লেট কপি করে নেওয়া “কারণ এটা গত বছর কাজ করেছিল।” পুরনো ডিপেনডেন্সি, লিগ্যাসি স্ক্রিপ্ট, বা পরিত্যক্ত প্যাটার্ন দ্রুত ছড়িয়ে পড়ে যখন সেগুলো স্টার্টারে থাকে।
টেমপ্লেটগুলোকে একটি প্রোডাক্ট হিসেবে আচরণ করুন: ভার্সন দিন, নির্ধারিত সময়ে রিভিউ করুন, এবং যখন কনভেনশন বদলায় আপডেট করুন। (যদি আপনার প্ল্যাটফর্ম স্ন্যাপশট এবং রোলব্যাক সমর্থন করে—Koder.ai করে—তবে স্টার্টারগুলোকে সাবধানে ইটারেট করতে সেগুলো ব্যবহার করুন যাতে প্রত্যেকের বেসলাইন নষ্ট না হয়।)
ডকুমেন্টেশন কমানো মানে মানুষকে অনুমান করে ছেড়ে দেয়া নয়। এর মানে হলো “হ্যাপি পাথ”টা এতটা ধারাবাহিক করা যে বেশিরভাগ প্রশ্ন নিজেই উত্তর খুঁজে পায়, এবং কেবল বাস্তবে অদ্ভুত অংশগুলোই লিখে রাখতে হয়।
জানার জন্য জায়গা যেখানে মানুষ বারবার একই প্রশ্ন করছে Slack, PR মন্তব্য, standup, বা অনবোর্ডিং সেশনে। কয়েকটি প্রম্পট:
যদি আপনি একই প্রশ্ন দুইবার শুনেন, সম্ভবত বেশি prose নয়—আপনার একটি কনভেনশন দরকার।
প্রতিটি পুনরাবৃত্ত প্রশ্নের জন্য, সিদ্ধান্ত নিন কোনটি সত্য:
একটা দরকারী নিয়ম: যদি একটি বিচ্যতি বাস্তবে সময় বাচায় না বা প্রকৃত ঝুঁকি প্রতিরোধ করে না, তা সম্ভবত চলমান বিভ্রান্তির মূল্য দেয় না।
একটি ছোট পেজ রাখুন (উদা: /docs/conventions) যা তালিকাভুক্ত করে:
শুধুমাত্র সেইগুলো লিখুন যা কেউ প্রথম সপ্তাহে জানলে কাজ সহজ হয়। যদি পেজ বড় হতে শুরু করে, সেটা প্রায়শই ইঙ্গিত যে আপনাকে কোডবেস সরল করতে হবে।
অ্যাপগুলো পরিবর্তিত হয়। একটি হালকা কোয়ার্টারলি রিভিউ নির্ধারণ করুন:
সম্ভব হলে ফ্রেমওয়ার্ক ডিফল্টগুলো পছন্দ করুন, এবং কেবল ভিন্ন যে বিষয়ে ডকুমেন্ট করুন—স্পষ্টভাবে, সংক্ষেপে, এবং এক জায়গায়।
ফ্রেমওয়ার্ক রীতিমালা হলো সেই ডিফল্ট প্যাটার্নগুলো যা ফ্রেমওয়ার্ক আপনাকে অনুসরণ করতে বলে—ফোল্ডার স্ট্রাকচার, নামকরণ, রাউটিং, ডেটা অ্যাক্সেস, এবং সাধারণ কমান্ড। যখন আপনি এগুলো মেনে চলেন, অন্য ডেভেলপাররা প্রজেক্ট-নির্দিষ্ট ডকস না পড়ে উচ্চ সম্ভাবনায় অনুমান করে নিতে পারে কোথায় কী আছে এবং কীভাবে কাজ করে।
প্রজেক্ট পরিবর্তন হলে প্রোস লেখাকে সঠিক রাখা কঠিন—এই কারণে দলগুলো অনেক ডকুমেন্ট তৈরি করে। ডকুমেন্টেশনের প্রধান কাজগুলো:
কনভেনশন প্রথম দুইটি সমস্যাকে আংশিকভাবে সমাধান করে কারণ Struktur এবং নামকরণ পূর্বানুমিত হয়।
না। কনভেনশন তাতে সাহায্য করে যে সাধারণ (অস্পষ্ট) বিষয়ের ডক কমিয়ে দেয়—উদাহরণ: কোন ফাইল কোথায় যাবে বা রাউটগুলো কীভাবে ওয়্যার্ড হবে—কিন্তু আপনি এখনও প্রজেক্ট-নির্দিষ্ট বিষয়গুলো ডকুমেন্ট করতে হবে: বাণিজ্যিক নিয়ম, ইচ্ছাকৃত বিচ্যতি, এবং গুরুত্বপূর্ণ সিদ্ধান্ত। ভাবুন: “কম ডকুমেন্ট, কিন্তু উচ্চ-মূল্যের ডকুমেন্ট।”
সেগুলো সাধারণত প্রথম দিনের প্রশ্নগুলো স্ট্যান্ডার্ড করে দেয়:
যখন কোড একটি পরিচিত প্যাটার্ন অনুসরণ করে, ডিরেক্টরি এবং ফাইলনেমগুলো একটি সাইনপোস্টের মতো কাজ করে। নতুন ব্যক্তি প্রত্যাশার ওপর ভিত্তি করে নেভিগেট করতে পারে (উদা: “টেমপ্লেটগুলো templates/-এ থাকে”, “মাইগ্রেশনগুলো migrations/-এ”), বদলে একটি বিশাল আর্কিটেকচার পেজ পড়ার দরকার নেই যা পুরানো হয়ে যেতে পারে।
এগুলো কনভেনশনকে ডিফল্ট আকারে এনকোড করে যাতে মানুষ স্মৃতির ওপর নির্ভর না করে। ভালো স্ক্যাফোল্ড গঠন করে:
এতে ড্রিফট কমে এবং “মানচিত্র” বিভিন্ন ফিচারে সামঞ্জস্যপূর্ণ থাকে।
কনভেনশন কাজ করা বন্ধ করলে বিভ্রান্তি ফিরে আসে। সাধারণ সংকেতগুলো:
UserService বনাম UsersManager বনাম user_service)এই অবস্থায় টিম অতিরিক্ত সিঙ্ক, দীর্ঘ PR বর্ণনা, এবং স্টেলড “কুইক ডকস” দিয়ে ক্ষতিপূরণ করে।
কেবল তখনি কাস্টমাইজ করুন যখন বাস্তব কারণ থাকে, এবং সেই ক্ষেত্রে একটি হালকা নোট রেখে যান:
README.md/docs/decisions-এ একটি এন্ট্রিলক্ষণীয়ভাবে লিখুন: কি পরিবর্তন, কেন পরিবর্তন, এবং ভবিষ্যতে কী করা উচিত।
কিন্তু শুরুতেই একটি ছোট, ব্যবহারিক বেসলাইন রাখুন:
হালকা রাখুন এবং কোড রিভিউতে বাধ্য করুন যে নতুন ব্যতিক্রমের সাথে মিল রেখে নোট যোগ করা হবে।
অটোমেশনকে কনভেনশন্স প্রয়োগযোগ্য করে তুলুন:
যখন চেকগুলো লোকাল ডেভ বা PR-এ ব্যর্থ হয়, ডেভেলপাররা নিয়মগুলো ততক্ষণ না শেখে যতক্ষণ না তারা সরাসরি ফিডব্যাক পায়—আর রিভিউয়াররা স্টাইল পোশাক কম দেখেন।
যখন এগুলো অনুমেয় হয়, রিপো নিজেই কার্যত স্ব-ব্যাখ্যামূলক হয়ে ওঠে।