দেখুন কিভাবে পরিষ্কার প্রম্পট ভালো আর্কিটেকচার, পরিষ্কার ডেটা মডেল এবং সহজ রক্ষণাবেক্ষণ নিশ্চিত করে—সহ প্রায়োগিক কৌশল, উদাহরণ ও চেকলিস্ট।

type, notes, বা metadata-র মতো ওভারলোডেড ফিল্ড যোগ করে যা ধীরে ধীরে “সবকিছুর রাখা” জায়গা হয়ে যায়।\n\n### সুনির্দিষ্ট সংজ্ঞা কীভাবে কি-সমূহ, সম্পর্ক ও কনস্ট্রেইন্ট উন্নত করে\n\nস্পষ্ট প্রম্পট নামগুলোকে এক্সপ্লিসিট সত্তায় পরিণত করে। উদাহরণস্বরূপ: “একটি Customer হল একটি প্রতিষ্ঠান। একটি User হল একটি লগইন যা একটি প্রতিষ্ঠানকে আবদ্ধ হতে পারে। একটি Account হল প্রতি প্রতিষ্ঠানের একটি বিলিং অ্যাকাউন্ট।” এখন আপনি আত্মবিশ্বাসের সাথে ডিজাইন করতে পারেন:\n\n- কী: customer_id বনাম user_id এক নয়\n- সম্পর্ক: one-to-many বনাম many-to-many অনুমান নয়\n- কনস্ট্রেইন্ট: ইউনিকনেস (ইমেল প্রতি প্রতিষ্ঠান), আবশ্যক ফিল্ড, বৈধ স্টেট\n\n### ডেটা লাইফসাইকেল “অমর” রেকর্ড প্রতিরোধ করে\n\nপ্রম্পট স্পষ্টতা লাইফসাইকেলকেও কভার করা উচিত: রেকর্ড কিভাবে তৈরি, আপডেট, ডিএ্যাক্টিভেট, মুছা এবং রাখা হবে। “ডিলিট কাস্টমার” মানে হতে পারে হার্ড ডিলিট, সফট ডিলিট, অথবা আইনি রিটেনশনসহ সীমিত অ্যাক্সেস। আগেই এটা বললে ব্রোকেন ফরেন কী, অনাথ ডেটা এবং অসঙ্গত রিপোর্টিং এড়ানো যায়।\n\n### নামকরণ সামঞ্জস্য ও ওভারলোডেড ফিল্ড এড়ান\n\nএকই ধারণার জন্য টেবিল ও API-তে ধারাবাহিক নাম ব্যবহার করুন (যেমন সবসময় customer_id, কখনও org_id নয়)। ওভারলোডেড কলাম থেকে বিরত থাকুন—স্বতন্ত্র ধারণাগুলো মডেল করুন; উদাহরণ: billing_status আলাদা রাখুন account_status থেকে, এক অনির্বচনীয় status পরিবর্তে।\n\n## শক্ত ডেটা মডেলের জন্য কী নির্দিষ্ট করবেন\n\nএকটি ডেটা মডেল ঠিক ততটুকুই ভাল যতটা আপনি আগেই বিবরণ দিয়েছেন। যদি একটি প্রম্পট বলে “কাস্টমার ও অর্ডার সংরক্ষণ করুন”, আপনি এমন স্কিমা পেতে পারেন যা ডেমোর জন্য কাজ করে কিন্তু বাস্তব জীবনের কন্ডিশন যেমন ডুপ্লিকেট, ইমপোর্ট এবং আংশিক রেকর্ডের অধীনে অকার্যকর।\n\n### মূল সত্তা ও আইডেন্টিফায়ার\n\nসত্তাগুলো স্পষ্টভাবে নাম করুন (উদাহরণ: Customer, Order, Payment) এবং প্রতিটির কীভাবে শনাক্ত করা হবে তা নির্ধারণ করুন।\n\n- প্রাইমারি আইডেন্টিফায়ার: UUID, ইমেইল, অ্যাকাউন্ট নম্বর, নাকি কম্পোজিট কী?\n- এক্সটার্নাল আইডি: রেকর্ডগুলো কি অন্য সিস্টেম থেকে সিঙ্ক হবে (যেমন CRM ID)? একাধিক এক্সটার্নাল ID থাকতে পারে কি?\n- ইউনিকনেস রুলস: ইমেইল কি গ্লোবালি ইউনিক, প্রতিটি টেন্যান্টে ইউনিক, না কি ইউনিক নয়?\n\n### স্টেট, ট্রানজিশন এবং লাইফসাইকেল রুলস\n\nঅনেকে স্টেট না নির্ধারণের কারণে মডেল ভেঙে যায়। স্পষ্ট করুন:\n\n- অনুমোদিত স্টেট (Draft → Submitted → Paid → Refunded)\n- কোন ট্রানজিশন অনুমোদিত এবং কী ট্রিগার করে\n- স্টেট মিউটেবল কি না (“Paid” রিভার্ট করা যাবে?) এবং কিভাবে পরিবর্তন অডিট করা হবে\n\n### ভ্যালিডেশন, আবশ্যক ক্ষেত্র ও ফরম্যাটিং\n\nকি থাকতে হবে আর কি থাকতে পারবে না, তা ঠিক করুন।\n\nউদাহরণ:\n\n- আবশ্যক বনাম ঐচ্ছিক ফিল্ড (যেমন ফোন ঐচ্ছিক, বিলিং ঠিকানা ইনভয়িসিং-এর জন্য আবশ্যক)\n- ফিল্ড কনস্ট্রেইন্ট (min/max দৈর্ঘ্য, অনুমোদিত ক্যারেকটার)\n- ভ্যালিডেশন টাইমিং (create-এ, update-এ, না কি ওয়ার্কফ্লো মিলস্টোনে)\n\n### সময়, কারেন্সি, লোকেল এবং টাইমজোন\n\nএগুলো আগে থেকেই নির্দিষ্ট করুন যাতে অদৃশ্য অসঙ্গতি না হয়।\n\n- টাইমস্ট্যাম্প কি UTC-তে রাখা হবে? অরিজিনাল টাইমজোনও সংরক্ষণ করবেন কি?\n- কারেন্সি ISO 4217 (USD/EUR) তে? মাইনর ইউনিট সহ? রাউন্ডিং রুলস?\n- লোকেল-নির্ভর ফরম্যাটিং বনাম নরমালাইজড স্টোরেজ\n\n### এজ কেস: ডুপ্লিকেট, মার্জ, ইমপোর্ট, আংশিক ডেটা\n\nবাস্তব সিস্টেমগুলোকে বিশৃঙ্খল বাস্তবতা নিয়ে কাজ করতে হয়। নির্দিষ্ট করুন কিভাবে পরিচালনা করতে হবে:\n\n- ডুপ্লিকেট ডিটেকশন এবং মার্জ রুলস (কোন ফিল্ড জিতবে, কি সংরক্ষণ হবে)\n- মিসিং ফিল্ডসহ ইম্পোর্ট করা রেকর্ড ("আংশিক" হিসেবে রাখবে?)\n- একাধিক উৎস থেকে সংঘর্ষপূর্ণ আপডেট এবং অডিট প্রয়োজনীয়তা\n\n## API কন্ট্রাক্ট: যেখানে প্রম্পট স্পষ্টতা দ্রুত প্রভাব ফেলে\n\nAPI কন্ট্রাক্টগুলো হল সেই জায়গা যেখানে প্রম্পট স্পষ্টতার ফলাফল দ্রুত দেখা যায়: যখন রিকোয়ায়ারমেন্ট স্পষ্ট, API অপব্যবহার করতে কঠিন হয়, ভার্সনিং সহজ হয়, এবং ব্রেকিং চেঞ্জের সম্ভাবনা কমে যায়।\n\n### ব্রেকিং চেঞ্জ প্রতিরোধে নির্দিষ্ট থাকা\n\n"অর্ডার আপডেট করার জন্য একটি endpoint যোগ করুন" ধরনের অস্পষ্ট প্রম্পট অসম্পূর্ণ অনুবাদ সৃষ্টি করতে পারে (পারশিয়াল বনাম ফুল আপডেট, ফিল্ড নাম, ডিফল্ট মান, অ্যাসিঙ্ক বনাম সিনক)। স্পষ্ট কন্ট্রাক্ট রিকোয়ায়ারমেন্ট সিদ্ধান্তগুলো দ্রুত বাধ্য করে:\n\n- কোন ফিল্ড writable, আবশ্যক, বা immutable\n- আপডেট PUT (রিপ্লেস) না PATCH (পারশিয়াল)\n- ব্যাকওয়ার্ড-কম্প্যাটিবিলিটি রুলস (উদাহরণ: নতুন ফিল্ড সবসময় অপশনাল; পুরনো ফিল্ডের মান পরিবর্তন করবেন না)\n\n### ত্রুটি পরিচালনা: ব্যর্থতা মোড ডিজাইনের অংশ করুন\n\n"ভালো ত্রুটি" কেমন হওয়া উচিত নির্ধারণ করুন। ন্যূনতমভাবে নির্দিষ্ট করুন:\n\n- পরিস্থিতি অনুযায়ী স্ট্যাটাস কোড (400 ভ্যালিডেশন, 401/403 অ্Dথ, 404 মিসিং, 409 কনফ্লিক্ট, 429 রেট লিমিট)\n- একটি কনসিস্টেন্ট এরর বডি (মেশিন কোড, মানুষ-বান্ধব বার্তা, ফিল্ড-স্তরের বিস্তারিত, কোরিলেশন/রিকুয়েস্ট ID)\n- রিট্রাই প্রত্যাশা: কোন ত্রুটি রিট্রাই করা নিরাপদ, এবং ব্যাক-অফ আচরণ কি হওয়া উচিত\n\n### পেজিনেশন, ফিল্টারিং, সোর্টিং ও আইডেমপটেন্সি\n\nএখানে অস্পষ্টতা ক্লায়েন্ট বাগ এবং অসম পারফরম্যান্স তৈরি করে। নিয়মগুলো বলুন:\n\n- পেজিনেশন স্টাইল (কোর্সর বনাম অফসেট), সীমা, এবং স্থিতিশীল অর্ডারিং গ্যারান্টি\n- সমর্থিত ফিল্টার ও তাদের ধরনের (এক্সাক্ট ম্যাচ, রেঞ্জ, এনাম)\n- সোর্টিং ফিল্ড এবং ডিফল্ট সোর্ট\n- লেখার জন্য idempotency (idempotency কি, dedupe উইন্ডো, ডুপ্লিকেট রিকুয়েস্টে আচরণ)\n\n### উদাহরণ ও কনস্ট্রেইন্ট সহ ডকুমেন্ট করুন\n\nকনক্রিট রিকুয়েস্ট/রেসপন্স স্যাম্পল এবং কনস্ট্রেইন্ট (min/max দৈর্ঘ্য, অনুমোদিত মান, তারিখ ফরম্যাট) অন্তর্ভুক্ত করুন। কয়েকটি উদাহরণ দীর্ঘ prose-এর চেয়ে ভুল বোঝাবুঝি অনেক কমায়।\n\n## রক্ষণাবেক্ষণযোগ্যতা: অস্পষ্টতার দীর্ঘমেয়াদী খরচ\n\nঅস্পষ্ট প্রম্পট কেবল "ভুল উত্তর" তৈরি করে না। তারা লুকানো অনুমান তৈরি করে—ছোট, undocumented সিদ্ধান্ত যা কোডপাথ, ডেটাবেস ফিল্ড এবং API রেসপন্স জুড়ে ছড়িয়ে পড়ে। ফলাফল: সফটওয়্যারটি কেবল নির্মাতার অনুমান সরবরাহকারী শর্তে কাজ করে, এবং বাস্তব ব্যবহার আলাদা হলে ভেঙে পড়ে।\n\n### লুকানো অনুমান ভঙ্গুর কোডে পরিণত হয়\n\nযখন প্রম্পট ভিন্নভাবে ব্যাখ্যা করে (উদাহরণ: “রিফান্ড সাপোর্ট করুন” বলেও না কোল), দলগুলো বিভিন্ন জায়গায় ফাঁকগুলো ভরাট করে: একটি সার্ভিস রিফান্ডকে রিভার্স হিসেবে দেখে, অন্যটি আলাদা লেনদেন হিসেবে, আর তৃতীয়টি পার্শিয়াল রিফান্ড সীমাবদ্ধতা ছাড়াই দেয়।\n\nস্পষ্ট প্রম্পট অনুমান কমায় কারণ এগুলো ইনভারিয়েন্টস হিসেবে বলে ("রিফান্ড ৩০ দিনের মধ্যে অনুমোদিত", "পার্শিয়াল রিফান্ড অনুমোদিত", "ডিজিটাল গুডসের জন্য ইনভেন্টরি রিস্টক করা হবে না"). এই বিবৃতিগুলো সিস্টেম জুড়ে পূর্বানুমান ছাড়া নির্ভরযোগ্য আচরণ চালায়।\n\n### স্পষ্টতা কোড এবং টেস্ট সরল করে\n\nরক্ষণাবেক্ষণযোগ্য সিস্টেম বোঝা সহজ। প্রম্পট স্পষ্টতা সমর্থন করে:\n\n- : ইনপুট ও স্টেটে সংজ্ঞা থাকায় কম ডিফেন্সিভ ব্রাঞ্চ।\n- : টেস্ট কেসগুলো সরাসরি গ্রহণযোগ্যতার মানদণ্ডের সাথে মানচিত্রিত হয়, “কি হলে কি হবে” ধেয়ে বেড়ানোর বদলে।\n- : আচরণ নির্দিষ্ট থাকলে আপনি confidently ইন্টারনাল বদলে দিতে পারেন এবং আউটকাম যাচাই করতে পারেন।\n\nযদি আপনি এআই-সহায়িত ডেভেলপমেন্ট ব্যবহার করেন, তাহলে সুনির্দিষ্ট রিকোয়ায়ারমেন্ট মডেলকে সঙ্গতিপূর্ণ ইমপ্লিমেন্টেশন জেনারেট করতে সাহায্য করে, plausible-but-mismatched টুকরো নয়।\n\n### অপারেবিলিটি: লগিং ও মেট্রিক্স ঐচ্ছিক নয়\n\nরক্ষণাবেক্ষণযোগ্যতার মধ্যে সিস্টেম চালানোর যোগ্যতাও আছে। প্রম্পটগুলিতে observability প্রত্যাশা নির্দিষ্ট করা উচিত: কি লগ করা হবে (এবং কি নয়), কোন মেট্রিকস গুরুত্বপূর্ন (ত্রুটি হার, ল্যাটেন্সি, রিট্রাই), এবং ব্যর্থতা কিভাবে surfaced হবে। না হলে দলগুলো সমস্যাগুলো গ্রাহক দেখতে পেয়ে পরে আবিষ্কার করে।\n\n### রক্ষণাবেক্ষণযোগ্যতার সিগন্যালগুলো যা খোঁজবেন\n\nঅস্পষ্টতা প্রায়ই কম কোহেশন এবং উচ্চ কাপলিং হিসেবে দেখা যায়: অপ্রাসঙ্গিক দায়িত্ব একত্রিত, “হেলপার” মডিউল যা সবকিছু স্পর্শ করে, এবং কলারের ওপর ভিত্তি করে আচরণ ভিন্ন। স্পষ্ট প্রম্পট কোহেসিভ কম্পোনেন্ট, সংকীর্ণ ইন্টারফেস, এবং পূর্বানুমানযোগ্য আউটপুট উৎসাহিত করে—যা ভবিষ্যৎ পরিবর্তন সস্তা করে। একটি বাস্তব উপায় এটি প্রয়োগ করতে দেখুন /blog/review-workflow-catch-gaps-before-building।\n\n## স্পষ্ট প্রম্পটের আগে ও পরে উদাহরণ\n\nঅস্পষ্ট প্রম্পট কেবল অস্পষ্ট টেক্সট তৈরি করে না—এটি ডিজাইনকে “জেনেরিক CRUD” ডিফল্টের দিকে ঠেলে দেয়। একটি স্পষ্ট প্রম্পট তৎক্ষণাৎ সিদ্ধান্ত বাধ্য করে: বাউন্ডারি, ডেটা মালিকানা, এবং ডাটাবেসে কী সত্য হওয়া উচিত।\n\n### আগে: অস্পষ্ট প্রম্পট\n\n> “Design a simple system to manage items. Users can create, update, and share items. It should be fast and scalable, with a clean API. Keep history of changes.”\n\nএকজন বিল্ডার (মানুষ বা এআই) কী অনায়াসে অনুমান করতে পারবে না:\n\n- “item” কী (ফিল্ড, লাইফসাইকেল, ইউনিকনেস)?\n- “share” মানে কি (পাবলিক লিংক বনাম নির্দিষ্ট ব্যবহারকারী বনাম টীম)?\n- “history” কী (পূর্ণ স্ন্যাপশট বনাম ডিফ, কে কি পরিবর্তন করেছে, রিটেনশন)?\n\n### পরে: সীমাবদ্ধতাসহ পরিষ্কার প্রম্পট\n\n> “Design a REST API for managing generic items with these rules: items have (required, max 120), (optional), (), (0–10). Each item belongs to exactly one owner (user). Sharing is per-item access for specific users with roles ; no public links. Every change must be auditable: store who changed what and when, and allow retrieving the last 50 changes per item. Non-functional: 95th percentile API latency < 200ms for reads; write throughput is low. Provide data model entities and endpoints; include error cases and permissions.”\n\nএখন আর্কিটেকচার ও স্কিমা পছন্দ তৎক্ষণাত বদলে যায়:\n\n- : একটি নিবেদিত কম্পোনেন্ট (রোল চেক) এবং একটি রাইট পাথ; যদি লেখার পরিমাণ কম হয়, জটিল ক্যাশিং দরকার নেই।\n- : , (many-to-many with role), এবং (append-only). একটি enum হয়ে যায়, এবং ট্যাগগুলো 10 টির সীমা বজায় রাখতে জয়েন টেবিলে যেতে পারে।\n\n### দ্রুত অনুবাদ টেবিল\n\n| অস্পষ্ট বাক্য | স্পষ্ট করা সংস্করণ |\n|---|---|\n| “Share items” | “Share with specific users; roles viewer/editor; no public links” |\n| “Keep history” | “Store audit events with actor, timestamp, changed fields; last 50 retrievable” |\n| “Fast and scalable” | “p95 read latency < 200ms; low write throughput; define main workload” |\n| “Clean API” | “List endpoints + request/response shapes + permission errors” |\n\n## ভালো ডিজাইনের জন্য একটি ব্যবহারিক প্রম্পট টেমপ্লেট\n\nএকটি স্পষ্ট প্রম্পট লম্বা হতে হবে না—এটি সংগঠিত হতে হবে। লক্ষ্য হলো পর্যাপ্ত প্রেক্ষাপট দেওয়া যাতে আর্কিটেকচার ও ডেটা মডেল সিদ্ধান্ত স্পষ্ট হয়, অনুমান নয়।\n\n### কপি/পেস্ট টেমপ্লেট\n\n\n\n### কার্যকরভাবে এটি কিভাবে ব্যবহার করবেন\n\nপ্রথমে 1–4 সেকশন পূরণ করুন। যদি আপনি কোর সত্তাগুলো ও সোর্স-অফ-ট্রুথ নামাতে না পারেন, ডিজাইন সাধারণত “API যা রিটার্ন করে” এর দিকে ঝুঁকে যায়, যা পরে মাইগ্রেশন ও অমীমাংসিত মালিকানার কারণ হয়।\n\nNFR-এ, অস্পষ্ট শব্দ ("দ্রুত","নিরাপদ") এড়িয়ে সংখ্যাসূচক লক্ষ্য, থ্রেশহোল্ড এবং ডেটা হ্যান্ডলিং নিয়ম দিন। এমনকি একটি খসড়া অনুমান (উদাহরণ: “p95 < 300ms reads at 200 RPS”) নীরবতার চেয়ে বেশি কার্যকর।\n\nগ্রহণযোগ্যতার মানদণ্ডে অন্তত একটি নেগেটিভ কেস (অবৈধ ইনপুট, অনুমতি প্রত্যাখ্যান) এবং একটি অপারেশনাল কেস (ব্যর্থতাগুলো কিভাবে surfaced) যোগ করুন। এটা ডিজাইনকে বাস্তব আচরণে বানায়, কেবল ডায়াগ্রামের নয়।\n\n## Koder.ai ব্যবহার করে স্পষ্ট প্রম্পটকে সঙ্গতিপূর্ণ বিল্ডে পরিণত করা\n\nপ্রম্পট স্পষ্টতা আরও গুরুত্ব পায় যখন আপনি এআই-এন্ড-টু-এন্ড বিল্ড করছেন—শুধুমাত্র স্নিপেট জেনারেট করা নয়। একটি vibe-coding ওয়ার্কফ্লোতে (যেখানে প্রম্পট রিকোয়ায়ারমেন্ট, ডিজাইন এবং ইমপ্লিমেন্টেশন চালায়), ছোট অস্পষ্টতাগুলো স্কিমা, API কন্ট্রাক্ট এবং UI আচরণে ছড়িয়ে পড়তে পারে।\n\nKoder.ai এই ধরণের ডেভেলপমেন্টের জন্য ডিজাইন করা হয়েছে: আপনি একটি স্ট্রাকচার্ড প্রম্পট চ্যাটে ইটারেট করতে পারেন, -এ অনুমান ও ওপেন প্রশ্নগুলি স্পষ্ট করে কোড জেনারেট করার আগে, এবং তারপর একটি কাজ করা ওয়েব/ব্যাকএন্ড/মোবাইল স্ট্যাক শিপ করতে পারেন (React, Go + PostgreSQL, Flutter)। Practical features যেমন আপনাকে নিরাপদে পরীক্ষা-নিরীক্ষা করতে দেয়, এবং দলগুলিকে মালিকানা রাখতে দেয়।\n\nযদি আপনি প্রম্পট শেয়ার করেন, উপরের টেমপ্লেটটিকে লাইভিং স্পেসিফিকেশন হিসেবে ট্র্যাক করা ক্লিন বাউন্ডারি ও কম ব্রেকিং চেঞ্জ তৈরিতে সাহায্য করে।\n\n## রিভিউ ওয়ার্কফ্লো: বিল্ড করার আগে গ্যাপ ধরুন\n\nএকটি স্পষ্ট প্রম্পট তখনই “সম্পন্ন” নয় যখন সেটা পাঠযোগ্য মনে হয়। এটা তখনই শেষ যখন দুইজন ভিন্ন মানুষ প্রায় একই সিস্টেম ডিজাইন করবে এটা পড়ে। একটি হালকা-ওজন রিভিউ ওয়ার্কফ্লো অস্পষ্টতা আগেই খুঁজে পেতে সাহায্য করে—বিল্ড হওয়ার আগে, যাতে আর্কিটেকচার চাহিদা, স্কিমা রাইট এবং API ব্রেকিং পরিবর্তন এড়ানো যায়।\n\n### ধাপ 1: রিড-ব্যাক (2 মিনিট)\n\nএকজন ব্যক্তিকে (PM, ইঞ্জিনিয়ার, বা AI) বলুন প্রম্পটকে আবার বলার জন্য: গোল, নন-গোল, ইনপুট/আউটপুট, এবং সীমাবদ্ধতাসমূহ কী। সেই রিড-ব্যাক আপনার ইরাদার সাথে তুলনা করুন। কোনো মিল না থাকলে সেটি একটি রিকোয়ায়ারমেন্ট যা স্পষ্ট করা হয়নি।\n\n### ধাপ 2: মিসিং প্রশ্নগুলো উত্থাপন করুন\n\nবিল্ডিংয়ের আগে “অজানা যা ডিজাইন বদলে দিতে পারে” তালিকাভুক্ত করুন। উদাহরণ:\n\n- কোন ফিল্ডের সোর্স-অফ-ট্রুথ কে (ইউজার বনাম সিস্টেম বনাম এক্সটার্নাল API)?\n- ডেটা অনুপস্থিত, দেরিতে আসা, ডুপ্লিকেট বা ভুল হলে কী হবে?\n- পারফরম্যান্স বা স্কেল প্রত্যাশা (মোট সংখ্যাসূচক)?\n\nপ্রশ্নগুলো সরাসরি প্রম্পটে একটি ছোট "Open questions" সেকশনে লিখুন।\n\n### ধাপ 3: অনুমান তালিকা রাখুন—এবং রূপান্তর করুন\n\nঅনুমান ঠিক আছে, তবে কেবল যদি সেগুলো দৃশ্যমান থাকে। প্রতিটি অনুমানের জন্য একটি সিদ্ধান্ত নিন:\n\n- : এটিকে স্পষ্ট করুন (উদাহরণ: “ইমেইল প্রতি ইউজার ইউনিক; পরিবর্তন করলে ভেরিফিকেশন দরকার”)\n- : এটিকে একটি ট্র্যাকড ফলোআপ হিসেবে চিহ্নিত করুন (উদাহরণ: “TODO: রিটেনশন পলিসি লিগ্যালের সাথে লঞ্চের আগে নিশ্চিত করতে হবে”)\n\n### ধাপ 4: ছোট চক্রে ইটারেট করুন\n\nএকটি বিশাল প্রম্পটের বদলে 2–3 সংক্ষিপ্ত ইটারেশন করুন: প্রথমে বাউন্ডারি স্পষ্ট করুন, তারপর ডেটা মডেল, তারপর API কন্ট্রাক্ট। প্রতিটি পাসে অস্পষ্টতা কমবে, স্কোপ বাড়বে না।\n\n### কুইক সাইন-অফ চেকলিস্ট (PM + ইঞ্জিনিয়ার)\n\n- সাফল্যের মেট্রিক্স ও গ্রহণযোগ্যতার মানদণ্ড লেখা আছে\n- নন-গোল স্পষ্ট করে বলা আছে\n- সিস্টেম বাউন্ডারি ও দায়িত্ব নামকরণ করা হয়েছে\n- কী সত্তা/ফিল্ড ও মালিকানা সংজ্ঞায়িত করা হয়েছে\n- ত্রুটি কেস ও এজ কেস বর্ণনা করা হয়েছে\n- অনুমানগুলো সিদ্ধান্ত বা TODO-তে রূপান্তরিত হয়েছে\n\n## সাধারণ ভুল ও কিভাবে ঠিক করবেন\n\nশক্তিশালী দলগুলিও ছোট, পুনরাবৃত্ত ভুলে স্পষ্টতা হারায়। শুভ সংবাদ: বেশিরভাগ সমস্যা সহজেই কোড লেখার আগে ধরা যায় এবং ঠিক করা যায়।\n\n### স্পষ্টতা নাশকারী জিনিসগুলো খেয়াল রাখুন\n\n ডিজাইন সিদ্ধান্ত লুকায়। “support”, “handle”, “optimize”, বা “make it easy” ধরনের শব্দগুলো সাফল্য কেমন তা বলে না।\n\n মালিকানা গ্যাপ তৈরি করে। “সিস্টেম ব্যবহারকারীকে নোটিফাই করে” বলতে কোন সিস্টেম কম্পোনেন্ট, কোন ইউজার টাইপ, এবং কোন চ্যানেল ব্যবহার হবে—এই প্রশ্নগুলো আছে।\n\n দুর্ঘটনাজনিত আর্কিটেকচারের দিকে নিয়ে যায়। আপনি স্কেল, ল্যাটেন্সি, প্রাইভেসি রুল, অডিট চাহিদা, কিংবা ডিপ্লয়মেন্ট বাউন্ডারি না বললে ইমপ্লিমেন্টেশন অনুমান করবে—পরে আপনি দাম দেবেন।\n\n### অতিরিক্তভাবে ইমপ্লিমেন্টেশন নির্দিষ্ট করবেন না\n\nএকটি সাধারণ ফাঁদ হলো টুলস ও ইন্টারনাল নির্ধারণ করা (“Use microservices”, “Store in MongoDB”, “Use event sourcing”) যখন আপনি আসলে ফলাফল বলতে চান (“independent deployments”, “flexible schema”, “audit trail”)। কেন আপনি কিছু চান সেটা বলুন, তারপর পরিমাপক রিকোয়ায়ারমেন্ট দিন।\n\nউদাহরণ: “Use Kafka” বলার বদলে লিখুন “Events must be durable for 7 days and replayable to rebuild projections.”\n\n### শুরুর দিকে বিরোধ এড়ান\n\nবিরোধ প্রায়ই আসে যেমন “রিয়েল-টাইম হতে হবে” এবং “ব্যাচ ঠিক আছে” একসাথে, বা “PII সংরক্ষণ করা যাবে না” এবং “ইমেইল ইউজারদের দেখান” একসাথে। অগ্রাধিকার স্থাপন করে (must/should/could) এবং এমন গ্রহণযোগ্যতার মানদণ্ড যোগ করে সমাধান করুন যা উভয়ই সত্য হতে পারে না।\n\n### অ্যান্টি-প্যাটার্ন ও ফিক্স\n\n- “Make onboarding simple.”\n “নতুন ব্যবহারকারী <3 মিনিটে অনবোর্ডিং সম্পন্ন করবে; সর্বোচ্চ 6 ফিল্ড; save-and-resume সাপোর্টেড।”\n\n- “Admins can manage accounts.”\n একশনগুলো নির্ধারণ করুন (suspend, reset MFA, change plan), পারমিশন এবং অডিট লগিং।\n\n- “Ensure high performance.”\n “P95 API latency <300ms at 200 RPS; rate-limited হলে graceful degrade.”\n\n- মিশ্র টার্মস ("customer","user","account").\n একটি ছোট গ্লসারি যোগ করুন এবং সারাজীবন একই টার্ম ব্যবহার করুন।\n\n## চেকলিস্ট ও পরবর্তী ধাপ\n\nস্পষ্ট প্রম্পট কেবল একজন অ্যাসিস্ট্যান্টকে “বুঝতে” সাহায্য করে না। এটা অনুমান কমায়, যা فوریভাবে পরিষ্কার সিস্টেম বাউন্ডারি, কম ডেটা-মডেল অবাক, এবং সহজে বিবর্তিত API-তে দেখা যায়। অস্পষ্টতা আবার কাজ তৈরী করে: অপ্রত্যাশিত মাইগ্রেশন, এমন এন্ডপয়েন্ট যা বাস্তব ওয়ার্কফ্লো মেলে না, এবং পুনরাবৃত্তি কাজ যা বারবার উঠে আসে।\n\n### পুনরায় ব্যবহার যোগ্য এক-পৃষ্ঠার চেকলিস্ট\n\nবিল্ড বা আর্কিটেকচার, স্কিমা, বা API ডিজাইন চাইতে যাওয়ার আগে এটি ব্যবহার করুন:\n\n- কোন ব্যবহারকারী আউটকাম হবেই? “ডান” হওয়ার মান কেমন?\n- কি আছে, কি বাইরে, কি পরে করা যাবে?\n- কে ফ্লো ট্রিগার করে (ইউজার, অ্যাডমিন, সিস্টেম জব)?\n- 2–5 হ্যাপি-পাথ ধাপ, এবং শীর্ষ ব্যর্থতা কেস।\n- গুরুত্বপূর্ণ সত্তা, আবশ্যক ফিল্ড, আইডি, এবং সম্পর্ক।\n- পারফরম্যান্স লক্ষ্য, প্রাইভেসি রুল, রিটেনশন, অডিট চাহিদা।\n- এক্সটার্নাল সিস্টেম, ইভেন্ট, কিউ এবং মালিকানার বাউন্ডারি।\n- ইনপুট/আউটপুট, ত্রুটি আচরণ, idempotency, পেজিনেশন।\n- টেস্টেবল বিবৃতি (এজ কেসসহ)।\n- সিস্টেম কি করবে না তা স্পষ্টভাবে বলুন।\n- আপনি কি বিশ্বাস করছেন কিন্তু যাচাই করেননি?\n- বিল্ডের আগে কোন কিছু উত্তর প্রয়োজন?\n\n### পরবর্তী ধাপ\n\n1. এবছরের কোন বাস্তব ফিচার বেছে নিন যা আপনি পরিকল্পনা করছেন।\n2. উপরের চেকলিস্ট ব্যবহার করে একটি প্রম্পট লিখুন।\n3. দুটি ডিজাইন জেনারেট করুন: একটি আপনার পুরনো প্রম্পট থেকে, একটি ক্লিয়ার করা প্রম্পট থেকে।\n4. ফলাফলগুলো তুলনা করুন তিনটি লেন্স দিয়ে: , , এবং ।\n5. ক্লিয়ার করা প্রম্পটকে আপনার স্পেসিফিকেশনের অংশ হিসেবে রাখুন (এটি লাইভিং ডকুমেন্ট হিসেবে কাজ করে)।\n\nআরও ব্যবহারিক প্যাটার্ন জানতে /blog ব্রাউজ করুন বা /docs-এ সাহায্যকারী গাইড দেখুন।
প্রম্পট স্পষ্টতা এমনভাবে আপনার চাহিদা ব্যক্ত করা যাতে প্রতিদ্বন্দ্বী মানে-প্রকাশের সুযোগ কমে। ব্যবহারিকভাবে এর মানে হলো লিখে রাখা:
এটি “ইরাদা” কে এমন দাবিতে পরিণত করে যা ডিজাইন, ইমপ্লিমেন্টেশন এবং টেস্টিং-এ ব্যবহার করা যায়।
অস্পষ্টতা নির্মাতাদের (মানুষ বা এআই) ধরেই ফাঁকগুলো পূরণ করতে বাধ্য করে, এবং বিভিন্ন ভূমিকা সাধারণত একই অনুমানে একমত থাকে না। খরচগুলো পরে দেখা যায়:
স্পষ্টতা সেই মতবিরোধগুলো আগেই দৃশ্যমান করে, যেখানে সেগুলো ঠিক করা সস্তা।
আর্কিটেকচার সিদ্ধান্ত পথনির্ভর: প্রথমে যেটা অনুবাদক/বিল্ডার ধরে নেয় তা সার্ভিস বাউন্ডারি, ডেটা ফ্লো এবং ‘কোথায় নিয়ম থাকে’-এ রূপ নেয়। যদি প্রম্পট দায়িত্ব নির্দিষ্ট না করে (যেমন বিলিং বনাম এন্টাইটলমেন্ট বনাম গ্রাহক স্থিতি), দলগুলো প্রায়ই একত্রিত মডিউল তৈরির দিকে যায় যা পরে বদলাতে কষ্ট দেয়।
একটি স্পষ্ট প্রম্পট আপনাকে দায়িত্ব স্পষ্টভাবে বরাদ্দ করতে সাহায্য করে এবং দুর্ঘটনাপূর্ণ বাউন্ডারি এড়ায়।
উদ্দেশ্য, নন-গোল এবং সীমাবদ্ধতাসমূহ যোগ করুন যাতে ডিজাইন স্পেস সংকুচিত হয়। উদাহরণ:
প্রতি নির্দিষ্ট বিবৃতি বহু 'হয়তো' আর্কিটেকচার সরিয়ে দেয় এবং ট্রেড-অফগুলো ইচ্ছাকৃত করে।
সামঞ্জস্যপূর্ণভাবে প্রতিটি কম্পোনেন্টে প্রভাব ফেলে এমন ক্রস-কাটিং চাহিদাগুলো স্পষ্টভাবে নাম দিন, কারণ এগুলো আর্কিটেকচারের উপর বড় প্রভাব ফেলে:
যদি এগুলো নির্দিষ্ট না থাকে, সেগুলো অসামঞ্জস্যভাবে (বা না-থেকেই) ইমপ্লিমেন্ট হয়।
“কাস্টমার”, “অ্যাকাউন্ট” এবং “ইউজার”ের মতো টার্মগুলো স্পষ্টভাবে সংজ্ঞায়িত করুন। না করলে স্কিমাগুলো ধীরে ধীরে nullable কলাম, ক্যাচ-অল টেবিল এবং status/type/metadata-র মতো ওভারলোডেড ফিল্ডে পরিণত হয়।
একটি ভালো প্রম্পট নির্দিষ্ট করে:
নিচের অংশগুলো অগ্রিম নির্দিষ্ট করুন কারণ এগুলোই বাস্তবে ব্যর্থতার কারণ হয়:
এইগুলো কীগুলো, কনস্ট্রেইন্ট ও অডিটেবিলিটি নির্দেশ করে—কল্পনায় নয়।
কনট্রাক্ট আচরণ সম্পর্কে স্পষ্ট থাকুন যাতে ক্লায়েন্টরা অনিচ্ছাকৃতভাবে অপরিবর্তিত ডিফল্টগুলোর ওপর নির্ভর না করে:
PUT vs PATCH, কোন ফিল্ড writable/immutable)হ্যাঁ—যদি আপনার Definition of Done-এ এটা থাকে। স্পষ্টভাবে যোগ করুন:
এগুলো না থাকলে অপারেবিলিটি অনিয়মিত হয় এবং প্রোডাকশন সমস্যা গ্রাহকদের নজরে আসার পরেই ধরা পড়ে।
সংক্ষিপ্ত পর্যালোচনার একটি ওয়ার্কফ্লো ব্যবহার করুন যা অস্পষ্টতাকে বিল্ড হওয়ার আগে বের করে:
একটি স্ট্রাকচার্ড প্রক্রিয়ার জন্য দেখুন /blog/review-workflow-catch-gaps-before-building।
titledescriptionstatusdraft|active|archivedtagsviewer|editoritemsitem_sharesitem_audit_eventsstatustext\n1) Goal\n- What are we building, and why now?\n- Success looks like: <measurable outcome>\n\n2) Users & roles\n- Primary users:\n- Admin/support roles:\n- Permissions/entitlements assumptions:\n\n3) Key flows (happy path + edge cases)\n- Flow A:\n- Flow B:\n- What can go wrong (timeouts, missing data, retries, cancellations)?\n\n4) Data (source of truth)\n- Core entities (with examples):\n- Relationships (1:N, N:N):\n- Data lifecycle (create/update/delete/audit):\n- Integrations/data imports (if any):\n\n5) Constraints & preferences\n- Must use / cannot use:\n- Budget/time constraints:\n- Deployment environment:\n\n6) Non-functional requirements (NFRs)\n- Performance: target latency/throughput, peak load assumptions\n- Uptime: SLA/SLO, maintenance windows\n- Privacy/security: PII fields, retention, encryption, access logs\n- Compliance: (if relevant)\n\n7) Risks & open questions\n- Known unknowns:\n- Decisions needed from stakeholders:\n\n8) Acceptance criteria + Definition of Done\n- AC: Given/When/Then statements\n- DoD: tests, monitoring, docs, migrations, rollout plan\n\n9) References\n- Link existing internal pages: /docs/<...>, /pricing, /blog/<...>\nকয়েকটি রিকোয়েস্ট/রেসপন্স উদাহরণ যুক্ত করলে অস্পষ্টতা দ্রুত কমে।