আপনার AI কোডিং সেটআপ একটি Complicated টুল। আপনার কোডবেস হলো Complex।

নতুন AI কোডিং টুলগুলো এজেন্টদের আরও নির্ভরযোগ্য করার প্রতিশ্রুতি দিচ্ছে। আপনি স্কিল, সুপারপাওয়ার এবং স্পেক-চালিত (spec-driven) ডেভেলপমেন্টের জন্য বিভিন্ন ফ্রেমওয়ার্ক দেখতে পাচ্ছেন। এই টুলগুলো কার্যকর। এগুলো এজেন্টদের অনুমানের পরিবর্তে একটি নির্দিষ্ট প্রক্রিয়া অনুসরণ করতে সাহায্য করে।

কিন্তু এখানে একটি ফাঁদ রয়েছে। মানুষ মনে করে একটি নির্দিষ্ট কাজের জন্য উন্নত সেটআপ একটি সুসংগত (coherent) সিস্টেম তৈরি করে। কিন্তু তা নয়।

কেন এমন হয় তা বুঝতে Cynefin ফ্রেমওয়ার্কটি ব্যবহার করুন। এটি সমস্যাগুলোকে দুই ভাগে ভাগ করে: Complicated এবং Complex।

Complicated সমস্যাসমূহ

এগুলোর একটি জানা বা নির্ণয়যোগ্য উত্তর থাকে। আপনি বিশ্লেষণ এবং দক্ষতার মাধ্যমে তা খুঁজে পেতে পারেন। উদাহরণস্বরূপ, একটি মডিউল রিফ্যাক্টর করা বা একটি ভ্যালিডেশন ফাংশন লেখা। একবার উত্তরটি খুঁজে পেলে, আপনি এটি বারবার করতে পারেন। বেশিরভাগ AI কোডিং টুল এই স্তরে কাজ করে। তারা কাজের একক বা 'unit of work'-এর ওপর মনোযোগ দেয়। তারা কাজগুলোকে পুনরাবৃত্তিযোগ্য এবং যাচাইযোগ্য করে তোলে।

Complex সমস্যাসমূহ

এগুলোর কোনো পূর্বানুমানযোগ্য উত্তর নেই। সিস্টেমটি বিভিন্ন অংশের একটি জাল বা নেটওয়ার্কের মতো। আপনি পদক্ষেপ নেওয়ার পরেই কেবল ফলাফল দেখা যায়। চল্লিশটি মার্জ করা পরিবর্তন কি ছয় মাস পর আর্কিটেকচার ভেঙে ফেলবে? এজেন্ট A কি এজেন্ট B-এর সাথে সাংঘর্ষিক হবে? আপনি কেবল একটি ফাইল দেখে এই উত্তরগুলো পেতে পারেন না। এগুলো অংশগুলোর পারস্পরিক মিথস্ক্রিয়া (interaction) থেকে উদ্ভূত হয়।

অমিলটি তখনই ঘটে যখন আপনি Complicated টুল দিয়ে Complex সমস্যা সমাধান করতে চান।

একটি টুল হয়তো এজেন্টকে একটি নিখুঁত ফাংশন লিখতে সাহায্য করতে পারে। কিন্তু যদি একটি টাস্কে userId এবং অন্যটিতে user_id ব্যবহার করা হয়, তবে সিস্টেমটি ভেঙে পড়বে। বিচ্ছিন্নভাবে দেখলে দুটি কাজই "সঠিক" ছিল। এই ব্যর্থতাটি উদ্ভূত (emergent)। এটি মিথস্ক্রিয়ার মধ্যে থাকে, একক কাজের মধ্যে নয়।

এমনকি বিশাল কনটেক্সট উইন্ডো (context window) দিয়েও এটি সমাধান করা সম্ভব নয়। একটি বড় উইন্ডো আপনাকে আরও বেশি কিছু দেখতে সাহায্য করে, কিন্তু দেখা মানেই সিদ্ধান্তে পৌঁছানো নয়। আপনি একটি সম্পূর্ণ কোডবেস পড়ে ফেললেও এটি জানতে পারবেন না যে প্রোডাকশন লোডের অধীনে এটি ডেডলক (deadlock) করবে কি না। এটি একটি রানটাইম প্রপার্টি (runtime property)।

উভয় পরিস্থিতি কীভাবে সামলাবেন:

  • Complicated লেয়ারের জন্য: স্কিল, স্পেক এবং TDD ব্যবহার করুন। এগুলো এজেন্টের ব্যক্তিগত আউটপুটকে নির্ভুল করে তোলে।
  • Complex লেয়ারের জন্য: probe-sense-respond পদ্ধতি ব্যবহার করুন। কী ভেঙে যাবে তা আপনি আগে থেকে অনুমান করতে পারবেন না। আপনাকে মার্জ করতে হবে, ডেপ্লয় করতে হবে এবং পর্যবেক্ষণ করতে হবে। বিভিন্ন অংশ একত্রিত করার পর কী ঘটে তা বুঝতে ইন্টিগ্রেশন টেস্ট এবং অবজারভেবিলিটি (observability) ব্যবহার করুন।

একটি উন্নত স্পেক আপনার সিস্টেমকে স্থিতিশীল করে তুলবে—এই প্রতিশ্রুতিতে বিভ্রান্ত হবেন না। স্পেক কাজের একককে (unit) নির্ভরযোগ্য করে তোলে, কিন্তু সিস্টেমকে সুসংগত (coherent) করে না।

আপনার পদ্ধতিকে ডোমেইনের সাথে সামঞ্জস্যপূর্ণ করুন। কাজের একককে নিখুঁত করতে টুল ব্যবহার করুন। সিস্টেমটি বুঝতে পরীক্ষা-নিরীক্ষা (experimentation) ব্যবহার করুন।

Source: https://dev.to/bala_paranj_059d338e44e7e/your-ai-coding-setup-is-a-complicated-domain-tool-your-codebase-is-complex-3mkc

Optional learning community: https://t.me/GyaanSetuAi