Claude Code ব্যবহার করে একটি পুনরাবৃত্ত লুপে পারফরম্যান্স তদন্ত করুন: মাপুন, হাইপোথিসিস তৈরি করুন, সামান্য পরিবর্তন করুন, এবং শিপ করার আগে আবার মাপুন।

পারফরম্যান্স বাগ অনুমানের দিকে নিয়ে যায়। কেউ লক্ষ্য করে যে একটি পেজ ধীর মনে হচ্ছে বা একটি API টাইমআউট হচ্ছে, আর দ্রুততম পদক্ষেপটা হতে পারে কোড “সাফ” করা, ক্যাশ যোগ করা, বা একটি লুপ রাইট করা। সমস্যা হলো "ধীর মনে হচ্ছে" একটা মেট্রিক না, আর "পরিষ্কার" মানেই দ্রুত নয়।
মাপা না থাকলে দলগুলো ঘন্টার পর ঘন্টা নষ্ট করে ভুল জিনিস বদলাতে থাকে। হট পাথ ডাটাবেসে, নেটওয়ার্কে, বা একটি অপ্রত্যাশিত অ্যালোকেশনে থাকতে পারে, যখন দল এমন কোড পরিষ্কার করে যা মূলতই তেমনই দ্রুত নয়। আরও খারাপ হলো, একটি বুদ্ধিমান মনে হওয়া পরিবর্তন পারফরম্যান্স খারাপ করতেই পারে: একটি টাইট লুপে অতিরিক্ত লগিং, একটি ক্যাশ যা মেমরি চাপ বাড়ায়, বা প্যারালেল কাজ যা লক কনটেনশন সৃষ্টি করে।
অনুমান ভরাট আরোও আচরণ ভাঙার ঝুঁকি তোলে। কোড বদলালে ফল, এরর হ্যান্ডলিং, অর্ডারিং, বা রিট্রাই বদলে যেতে পারে। যদি আপনি যথাযথতা ও গতি একসাথে পুনরায় পরীক্ষা না করেন, আপনি একটি বেঞ্চমার্কে “জিতে” জালবলে একটি বাগ চালিয়ে দিতে পারেন।
পারফরম্যান্সকে বিতর্ক নয়—একটি পরীক্ষা মনে করুন। লুপটি সহজ এবং পুনরাবৃত্তিযোগ্য:
অনেক জয়ই মডেস্ট: p95 ল্যাটেন্সি থেকে 8% ছেঁটে ফেলা, পিক মেমরি 50MB কমানো, বা একটি ডাটাবেস কুয়েরি কেটে ফেলা। সেই জয়গুলো তখনই গুরুত্বপূর্ণ যখন সেগুলো মাপা, যাচাইকৃত, এবং পুনরাবৃত্তিযোগ্য।
এটি একটি লুপ হিসেবে সবচেয়ে ভালো কাজ করে, একবারের "দ্রুততর করো" অনুরোধ নয়। লুপ আপনাকে সততার মধ্যে রাখে কারণ প্রতিটি কাজ প্রমাণ এবং একটি সংখ্যা-এ ফিরে যায় যা আপনি দেখবেন।
একটি স্পষ্ট ক্রম:
প্রতিটি ধাপ আপনাকে বিভিন্ন ধরনের স্ব-প্রতারণা থেকে রক্ষা করে। আগে মাপা আপনাকে এমন কিছু “ফিক্স” করা থেকে রোধ করে যা বাস্তবে সমস্যা ছিল না। লিখিত হাইপোথিসিস আপনাকে একই সঙ্গে পাঁচটা জিনিস বদলাতে বাধা দেয় এবং পরে কোনটা mattered তা অনুমান করা থেকে রোধ করে। ন্যূনতম পরিবর্তন আচরণ ভাঙার বা নতুন বটলনেক যোগ করার ঝুঁকি কমায়। পুনরায় পরিমাপ প্লাসিবো জয় (যেমন ওয়ার্ম ক্যাশের কারণে একটি দ্রুত রান) ধরবে এবং রিগ্রেশন ফাঁস করবে।
"ডান" হওয়া অনুভব করার কথাও নয়; এটা একটি ফল: টার্গেট মেট্রিক সঠিক দিকে নড়েছে, এবং পরিবর্তনটি স্পষ্ট রিগ্রেশন—এরর, বেশি মেমরি, খারাপ p95 ল্যাটেন্সি, বা পার্শ্ববর্তী এন্ডপয়েন্ট ধীর—ঘটায়নি।
কখন বন্ধ করা যায় তা জানা ওয়ার্কফ্লোর একটি অংশ। লাভ সমানভাবে কমে গেলে, মেট্রিক ব্যবহারকারীদের জন্য যথেষ্ট ভাল হলে, বা পরবর্তী আইডিয়া বড় রিফ্যাক্টর চাইবে কিন্তু লাভ ছোট হবে—বন্দ করা যায়। পারফরম্যান্স কাজের সবসময় সুযোগের ব্যয় আছে; লুপ আপনাকে সেই জায়গায় সময় খরচ করতে সাহায্য করে যেখানে সেটি ফলপ্রসূ।
একসঙ্গে পাঁচটা জিনিস মাপলে আপনি জানবেন না কি উন্নত হলো। এই তদন্তের জন্য একটি প্রাথমিক মেট্রিক বাছুন এবং বাকি সব কিছুকে সহায়ক সংকেত হিসেবে গণ্য করুন। ব্যবহারকারীর সামনে দেখানো সমস্যার জন্য সাধারণত মেট্রিকটি ল্যাটেন্সি। ব্যাচ কাজে এটি হতে পারে থ্রুপুট, CPU সময়, মেমরি ব্যবহার, বা প্রতি রান ক্লাউড খরচ।
দৃশ্যপট সম্পর্কে সুনির্দিষ্ট হন। "API ধীর" খুব অস্পষ্ট। "POST /checkout একটি_typical_cart_3_items" টাইপ নির্ধারিত হওয়া দরকার—(উদাহরণ: "POST /checkout একটি ৩ আইটেমের কার্ট দিয়ে")—এটি মাপ করার যোগ্য। ইনপুট স্থিতিশীল রাখুন যাতে সংখ্যাগুলি অর্থবহ হয়।
কোডে হাত দেওয়ার আগে বেসলাইন এবং পরিবেশের বিবরণ লিখে রাখুন: ডেটাসেট সাইজ, মেশিন টাইপ, বিল্ড মোড, ফিচার ফ্ল্যাগ, concurrency, এবং ওয়ার্মআপ। এই বেসলাইন আপনার অ্যাঙ্কর। এটাকে ছাড়া প্রতিটি পরিবর্তনই অগ্রগতি মনে হতে পারে।
ল্যাটেন্সির জন্য, গড় নয়, পারসেন্টাইলের উপর নির্ভর করুন। p50 সাধারণ অভিজ্ঞতা দেখায়, আর p95 ও p99 যেসব কষ্টদায়ক টেইল ব্যবহারকারীরা ভোগ করে তা বলে দেয়। একটি পরিবর্তন যা p50 উন্নত করলেও p99 খারাপ করে, তবুও ধীর মনে হতে পারে।
আগেই সিদ্ধান্ত নিন "অর্থবহ" কী মানে, যাতে আপনি শোরগোল উদযাপন না করেন:
একবার এই নিয়মগুলো সেট হলে, আপনি ধারণা পরীক্ষা করতে পারবেন goalposts না সরিয়ে।
বিশ্বাস করার মতো সহজ সংকেত দিয়ে শুরু করুন। একটি অনুরোধের চারপাশে একটি একক টাইমিং আপনাকে জানাতে পারে সমস্যাটি আছে কিনা এবং আকারটা কতটা। গভীর প্রোফাইলিং রাখুন যখন কেন ধীর তা ব্যাখ্যা করতে হবে।
ভাল প্রমাণ সাধারণত বিভিন্ন উৎসের মিশ্রণ থেকে আসে:
প্রশ্ন যদি হয় "এটা ধীর কি, এবং কতটা?" তাহলে সরল মেট্রিক ব্যবহার করুন। প্রশ্ন যদি হয় "সময় কোথায় যাচ্ছে?" তাহলে প্রোফাইলিং ব্যবহার করুন। যদি p95 ল্যাটেন্সি ডিপ্লয়ের পরে দ্বিগুণ হয়ে যায়, তাহলে রিগ্রেশন নিশ্চিত করতে টাইমিং ও লগ দিয়ে শুরু করুন এবং স্কোপ নির্ধারণ করুন। টাইমিংগুলো দেখালে যদি অধিকাংশ বিলম্ব আপনার অ্যাপ কোডের ভিতর (DB নয়) হচ্ছে, তাহলে একটি CPU প্রোফাইলার বা flame graph সঠিক ফাংশনটি নির্দেশ করতে পারে।
পরিমাপ নিরাপদ রাখুন। ডিবাগ করার জন্য যা প্রয়োজন ততটুকুই সংগ্রহ করুন, ব্যবহারকারীর কনটেন্ট নয়। অ্যাগ্রিগেটস (দৈর্ঘ্য, কাউন্ট, সাইজ) কাঁচা পে-লোডের বদলে পছন্দ করুন, এবং ডিফল্টরূপে আইডেন্টিফায়ার রেড্যাক্ট করুন।
শোরগোল বাস্তব, তাই একাধিক স্যাম্পেল নিন এবং আউটলায়ার নোট করুন। একই রিকোয়েস্ট 10–30 বার চালান, এবং একটি সেরা রানের পরিবর্তে median ও p95 রেকর্ড করুন।
পরিবর্তনের পরে একই করে পুনরায় চালানোর জন্য নির্দিষ্ট টেস্ট রেসিপি লিখে রাখুন: পরিবেশ, ডেটাসেট, এন্ডপয়েন্ট, রিকোয়েস্ট বডি সাইজ, concurrency লেভেল, এবং কীভাবে ফলাফল আপনেশেন ধরা হয়েছে।
একটি নামযুক্ত লক্ষণ দিয়ে শুরু করুন: "p95 ল্যাটেন্সি ট্রাফিক পিকের সময় 220 ms থেকে 900 ms এ উঠে যায়", "CPU দুই কোরে 95% থাকে", বা "মেমরি প্রতি ঘন্টা 200 MB বাড়ে"। অস্পষ্ট লক্ষণ যেমন "ধীর মনে হচ্ছে" এলোমেলো পরিবর্তনে নিয়ে যায়।
পরবর্তী ধাপ হল আপনার মাপা তথ্যকে একজন সন্দেহভাজন এলাকার দিকে অনুবাদ করা। একটি flame graph দেখাতে পারে বেশিরভাগ সময় JSON এনকোডিংতে যাচ্ছে, একটি ট্রেস ধরা দিতে পারে একটি ধীর কল পাথ, বা DB স্ট্যাটস দেখাতে পারে একটি কুয়েরি মোট সময় অধিকাংশ দখল করছে। সেই ক্ষুদ্রতম এলাকার দিকে লক্ষ্য রাখুন যা মোট খরচের বড় অংশ ব্যাখ্যা করে: একটি ফাংশন, একটি একক SQL কুয়েরি, বা একটি এক্সটার্নাল কল।
একটি ভাল হাইপোথিসিস এক বাক্যে, টেস্টযোগ্য, এবং একটি পূর্বাভাসের সঙ্গে। আপনি চাইছেন সাহায্য একটি আইডিয়া পরীক্ষা করার, এক মহাকবি বানানোর জন্য নয়।
এই ফরম্যাটটি ব্যবহার করুন:
উদাহরণ: "প্রোফাইল দেখালে CPU-এর 38% SerializeResponse-এ যাচ্ছে, প্রতি রিকোয়েস্টে একটি নতুন বাফার আলোকেশন CPU স্পাইক করছে। যদি আমরা একটি রিইউজড বাফার ব্যবহার করি, তাহলে একই লোডে p95 ল্যাটেন্সি প্রায় 10–20% কমতে পারে এবং CPU 15% কমা প্রত্যাশিত।"
কোড ছোঁরার আগে বিকল্পসমূহ নাম করে রাখুন। হয়তো ধীর অংশটা upstream dependency, লক কনটেনশন, ক্যাশ মিস-রেট পরিবর্তন, বা একটি রোলআউট যা পেলোড সাইজ বাড়িয়েছে। 2–3 বিকল্প ব্যাখ্যা লিখে রাখুন, তারপর যে প্রমাণ সেরা সমর্থন করে সেটি বেছে নিন। যদি আপনার পরিবর্তন মেট্রিক না সরায়, আপনার কাছে পরবর্তী হাইপোথিসিস আগেই থাকবে।
Claude যখন আপনি এটাকে সতর্ক বিশ্লেষক হিসেবে ব্যবহার করবেন তখন পারফরম্যান্স কাজেই সবচেয়ে উপকারী—অরাকল নয়। প্রতিটি পরামর্শ আপনার মাপা তথ্যের সঙ্গে যুক্ত রাখুন, এবং প্রতিটি ধাপ প্রমাণ সহ খন্ড করা যায় এমন করে রাখুন।
একে অস্পষ্ট বর্ণনার পরিবর্তে বাস্তব ইনপুট দিন। ছোট, ফোকাসড প্রমাণ পেস্ট করুন: একটি প্রোফাইলিং সারাংশ, ধীর রিকোয়েস্টের কয়েকটি লগ লাইন, একটি কুয়েরি প্ল্যান, এবং নির্দিষ্ট কোড পাথ। "আগে" নম্বর (p95 ল্যাটেন্সি, CPU সময়, DB সময়) অন্তর্ভুক্ত করুন যাতে এটি আপনার বেসলাইন জানে।
একে জিজ্ঞাসা করান যে ডাটা কী নির্দেশ করে এবং কী নির্দেশ করে না। এরপর প্রতিদ্বন্দ্বী ব্যাখ্যা জোর করুন। একটি মূল্যবান প্রম্টের শেষ লাইনে থাকতে পারে: "আমাকে 2–3 হাইপোথিসিস দাও, এবং প্রতিটির জন্য কী যাবে তা বলো যা সেটাকে খণ্ড করবে।" এতে প্রথম সম্ভাব্য গল্পেই আটকে থাকা রোধ হয়।
কোডে হাত দেওয়ার আগে সবচেয়ে ছোট পরীক্ষা কী হবে তা জিজ্ঞাসা করুন। দ্রুত ও উল্টানো যোগ্য হোক: একটি ফাংশনের চারপাশে একটি টাইমার যোগ করা, একটি প্রোফাইলার ফ্ল্যাগ চালু করা, বা একটি DB কুয়েরি EXPLAIN দিয়ে চালানো।
কঠোর কাঠামোর জন্য আউটপুট চাইলে বলুন:
যদি এটি নির্দিষ্ট মেট্রিক, লোকেশন, এবং প্রত্যাশিত ফলাফল না বলতে পারে, আপনি আবার অনুমানেই ফিরে যাচ্ছেন।
প্রমাণ ও হাইপোথিসিস থাকলে সবকিছু "পরিষ্কার" করার তাগিদ থেকে বিরত থাকুন। পারফরম্যান্স কাজ সবচেয়ে বিশ্বাসযোগ্য হয় যখন কোড পরিবর্তনটা ছোট এবং সহজে reverট করা যায়।
একেবারেই একবারে একটাই পরিবর্তন করুন। যদি আপনি একই কমিটে একটি কুয়েরি টুইক, ক্যাশ যোগ করা, এবং লুপ রিফ্যাক্টর করুন, আপনি জানবেন না কোনটা সাহায্য করেছে (বা ক্ষতি করেছে)। একচরিত্র পরিবর্তন পরবর্তী পরিমাপকে অর্থবহ করে তোলে।
কোড ছোঁরার আগে আপনি কী ফল আশা করেন সংখ্যায় লিখে রাখুন। উদাহরণ: "p95 ল্যাটেন্সি 420 ms থেকে 300 ms-এর নিচে নামা উচিত, এবং DB সময় প্রায় 100 ms কমা উচিত।" যদি ফলাফল সেই লক্ষ্য মিস করে, দ্রুত শিখবেন যে হাইপোথিসিস দুর্বল বা অসম্পূর্ণ ছিল।
পরিবর্তন উল্টানোর জন্য সহজ রাখুন:
"ন্যূনতম" মানে "তুচ্ছ" নয়। এটা ফোকাসড—একটি ব্যয়বহুল ফাংশনের রেজাল্ট ক্যাশ করা, একটি টাইট লুপে একবারের অতিরিক্ত অ্যালোকেশন বন্ধ করা, বা অনুরোধগুলোর জন্য অপ্রয়োজনীয় কাজ বন্ধ করা।
সন্দেহভাজন বটলনেকের চারপাশে হালকা টাইমিং যোগ করুন যাতে আপনি দেখতে পান কী সরল হয়েছে। একটি কলের আগে ও পরে একটি টাইমস্ট্যাম্প (লগ বা মেট্রিক হিসেবে) নিশ্চিত করতে পারে আপনার পরিবর্তনটি ধীর অংশে আঘাত করেছে কি না বা কেবল সময় অন্য কোথাও সরে গেছে।
পরিবর্তনের পরে, বেসলাইন যেখানে ধরেছিলেন ঠিক সেই একই দৃশ্যপট আবার চালান: একই ইনপুট, পরিবেশ, এবং লোড শেপ। যদি আপনার টেস্ট ক্যাশ বা ওয়ার্ম-আপের উপর নির্ভরশীল, সেটি স্পষ্টভাবে উল্লেখ করুন। অন্যথায় আপনি এমন উন্নতি "পাবেন" যা কেবল ভাগ্য কিয়।
একই মেট্রিক ও একই পারসেন্টাইল দিয়ে ফলাফল তুলনা করুন। গড় অনেক কষ্ট ঢেকে দিতে পারে, তাই p95 ও p99 ল্যাটেন্সি, পাশাপাশি থ্রুপুট ও CPU সময় দেখুন। সংখ্যাগুলো স্থির হচ্ছে কি না দেখতে যথেষ্ট রেপিটেশন চালান।
উৎসব করার আগে, একহল প্রতিকূলতা তদন্ত করুন:
পরিচিতি অনুযায়ী সিদ্ধান্ত নিন—যদি উন্নতি প্রকৃত এবং রিগ্রেশন না থাকে, সেভ করা যায়। ফলাফল গোলমালে হলে, রিভার্ট করুন এবং নতুন হাইপোথিসিস তৈরি করুন, বা পরিবর্তনটাকে আরও বিচ্ছিন্ন করুন।
যদি আপনি Koder.ai-এর মতো প্ল্যাটফর্মে কাজ করেন, পরীক্ষার আগে একটি স্ন্যাপশট নেওয়া রোলব্যাককে এক ধাপে নামাতে পারে, যা সাহসী আইডিয়া পরীক্ষা করা সহজ করে।
সবশেষে, আপনি যা শিখলেন তা লিখে রাখুন: বেসলাইন, পরিবর্তন, নতুন সংখ্যাগুলি, এবং সিদ্ধান্ত। এই সংক্ষিপ্ত নথি পরবর্তী রাউন্ডকে একই সঙ্গে একই ডেড এন্ডে না পাঠাবে।
পারফরম্যান্স কাজ সাধারণত তখন উল্টোপথে যায় যখন আপনি মাপা ও বদলানো জিনিসের মধ্যে থ্রেড হারিয়ে ফেলেন। একটি পরিষ্কার প্রমাণ-চেইন রাখুন যাতে আপনি আত্মবিশ্বাসের সঙ্গে বলতে পারেন কি জিনিস ভাল করেছে বা খারাপ করেছে।
দোহারানো অপরাধীগণ:
একটি ছোট উদাহরণ: একটি এন্ডপয়েন্ট ধীর দেখায়, তাই আপনি সিরিয়ালাইজনার টিউন করেন কারণ প্রোফাইলে তা হট দেখা গেছে। তারপর আপনি ছোট ডেটাসেট দিয়ে পুনরায় টেস্ট করেন এবং দ্রুত দেখায়। প্রোডাকশনে p99 আরও খারাপ হয়ে যায় কারণ ডাটাবেস এখনও বটলনেক এবং আপনার পরিবর্তন পেলোড সাইজ বাড়িয়েছে।
যদি আপনি Claude Code কে ফিক্স প্রস্তাব করতে ব্যবহার করেন, তবে এটাকে সংক্ষিপ্ত পাটিতে রাখুন। 1–2 ন্যূনতম পরিবর্তন চাইুন যা আপনার সংগ্রহ করা প্রমাণের সঙ্গে মেলে, এবং একটি পুনরায় মাপার পরিকল্পনা দাবি করুন পর্বে প্যাঁচ গ্রহণ করার আগে।
স্পিড ক্লেইমগুলো তখনই ভেঙে পড়ে যখন টেস্ট অস্পষ্ট। উৎসব করার আগে নিশ্চিত করুন আপনি কী মাপলেন, কিভাবে মাপলেন, এবং কী বদলালেন বলতে পারেন।
প্রাথমিকভাবে একটি মেট্রিক নাম লিখুন এবং বেসলাইন ফলাফল নোট করুন। সংখ্যাগুলো পাল্টায় এমন বিবরণ লিখে রাখুন: মেশিন টাইপ, CPU লোড, ডেটাসেট সাইজ, বিল্ড মোড (ডিবাগ বনাম রিলিজ), ফিচার ফ্ল্যাগ, ক্যাশ স্টেট, এবং concurrency। যদি আপনি setup টা আগামীকাল পুনরায় তৈরি না করতে পারেন, আপনার কাছে বেসলাইন নেই।
চেকলিস্ট:
সংখ্যাগুলো ভালো হলে দ্রুত একটি রিগ্রেশন পাস চালান: সঠিকতা (আউটপুট মেলে কি না), এরর রেট, টাইমআউট, মেমোরি, CPU/DB লোড। p95 ল্যাটেন্সি উন্নতি করে কিন্তু মেমোরি দ্বিগুণ হলে সেটা ভুল ট্রেডঅফ হতে পারে।
একটি দল রিপোর্ট করেছে যে GET /orders ডেভ-এ ঠিক আছে, কিন্তু স্টেজিং-এ মাঝারি লোডে ধীর হয়ে যায়। ব্যবহারকারীরা টাইমআউটের অভিযোগ করছেন, কিন্তু গড় ল্যাটেন্সি “ঠিক আছে” দেখা যায়—এটা একটি ক্লাসিক ফাঁদ।
প্রথমে বেসলাইন নিন। একই ডেটাসেট, একই concurrency, একই সময়কাল ধরে একটি স্টেডি লোড টেস্টে আপনি রেকর্ড করতে পারেন:
এখন প্রমাণ সংগ্রহ করুন। একটি দ্রুত ট্রেস দেখায় এন্ডপয়েন্টটি একটি প্রধান কুয়েরি চালায়, তারপর প্রতিটি অর্ডারের জন্য সংশ্লিষ্ট আইটেমগুলো লুপ করে আলাদা করে নেয়—N+1 সমস্যা। JSON রেসপন্স বড়, কিন্তু DB সময়ই ডমিনেন্ট করছে।
এটাকে হাইপোথিসিস তালিকায় পরিণত করুন:
সবচেয়ে শক্ত প্রমাণের সাথে মেলে এমন ন্যূনতম পরিবর্তন চাইুন: order IDs দিয়ে keyed করে আইটেমগুলো একবারে নিয়ে আসা (অথবা slow query plan দেখালে মিসিং ইনডেক্স যোগ করা)। এটাকে রিভার্সিবল রাখুন এবং ফোকাসড কমিট রাখুন।
একই লোড টেস্টে পুনরায় পরিমাপ করলে ফলাফল হতে পারে:
সংঘর্ষ: ফিক্সটি শিপ করুন (স্পষ্ট জয়), তারপর DB আর প্রধান সীমাবদ্ধ নয় বলে CPU স্পাইক ও বাকি গ্যাপ নিয়ে দ্বিতীয় চক্র শুরু করুন।
পারফরম্যান্স তদন্তে দ্রুত উন্নতি করার দ্রুত পথ হলো প্রতিটি রানের উপর একটি ছোট, পুনরাবৃত্ত পরীক্ষার মতো আচরণ করা। যখন প্রক্রিয়াটি সঙ্গতিশীল হবে, ফলাফলগুলো বিশ্বাসযোগ্য, তুলনীয় এবং শেয়ারযোগ্য হয়ে উঠবে।
একটি সহজ এক-পেজ টেমপ্লেট সাহায্য করে:
এই নোটগুলো কোথায় থাকবে সিদ্ধান্ত নিন যাতে হারিয়ে না যায়। একটি শেয়ারে জায়গা গুরুত্বপূর্ণ—রিপো ফোল্ডার সার্ভিসের পাশে, একটি টিম ডক, বা টিকেট নোট। লক্ষ্যটা হলো ডিসকাভারেবল হওয়া: কেউ পরে খুঁজে পাবে "p95 latency spike after caching change"।
নিরাপদ পরীক্ষা অভ্যাসে পরিণত করুন। স্ন্যাপশট ও সহজ রোলব্যাক ব্যবহার করুন যাতে আপনি একটি আইডিয়া ঝুঁকি ছাড়াই চেষ্টা করতে পারেন। যদি আপনি Koder.ai দিয়ে বানাচ্ছেন, Planning Mode একটি সুবিধাজনক জায়গা হতে পারে মাপার পরিকল্পনা লিখে রাখার জন্য, হাইপোথিসিস সংজ্ঞায়িত করা এবং পরিবর্তনটি স্কোপ করার আগে একটি টাইট ডিফ জেনারেট করে পুনরায় মাপার পরিকল্পনা তৈরি করার জন্য।
ক্যাডেন্স সেট করুন—ইনসিডেন্ট পর্যন্ত অপেক্ষা করবেন না। নতুন কুয়েরি, নতুন এন্ডপয়েন্ট, বড় পেলোড, বা ডিপেন্ডেন্সি আপগ্রেডের পরে ছোট পারফরম্যান্স চেক যোগ করুন। এখনকার 10 মিনিটের বেসলাইন চেক পরে একটি দিনের অনুমান বাঁচাতে পারে।
একটি অভিযোগের সাথে মেলে এমন এক সংখ্যার সঙ্গে শুরু করুন—সাধারণত নির্দিষ্ট এন্ডপয়েন্ট এবং ইনপুটের জন্য p95 ল্যাটেন্সি। একই শর্ত (ডেটা সাইজ, concurrency, কোল্ড/ওয়ার্ম ক্যাশ) altında একটি বেসলাইন রেকর্ড করুন, তারপর একটি পরিবর্তন করে আবার পরিমাপ করুন।
যদি আপনি বেসলাইন পুনরায় উৎপাদন করতে না পারেন, তখন আপনি এখনও পরিমাপ করছেন না—আপনি অনুমান করছেন।
একটি ভাল বেসলাইনে থাকা উচিত:
কোড ছোঁরার আগে এটি লিখে রাখুন যাতে লক্ষ্য বদলানো না যায়।
পারসেন্টাইলগুলো ইউজার এক্সপেরিয়েন্স ভালোভাবে দেখায়, একটি গড় নয়। p50 হচ্ছে “স্বাভাবিক” অভিজ্ঞতা, কিন্তু ব্যবহারকারীরা ধীরে ধীরে পড়া টেইলের জন্য অভিযোগ করে—যা p95/p99 আকারে ধরা পড়ে।
p50 ভালো হলেও p99 খারাপ হলে সিস্টেম ধীর মনে হতে পারে, যদিও গড় ভালো দেখায়।
সাধারণ টাইমিং/লগ ব্যবহার করুন যখন প্রশ্নটা হলো "এটা ধীর কি, এবং কতটা?" প্রোফাইলিং ব্যবহার করুন যখন প্রশ্নটা হলো "সময়টা কোথায় যাচ্ছে?"
প্র্যাকটিক্যাল ফ্লো: প্রথমে অনুরোধ টাইমিং দিয়ে রিগ্রেশন নিশ্চিত করুন, তারপর ধীরতা প্রকৃত এবং সুনির্দিষ্ট হলে প্রোফাইল চালান।
একটি প্রধান মেট্রিক বাছুন, বাকি গুলোকেও গার্ডরেল হিসেবে রাখুন। সাধারণ সেটটি হতে পারে:
এতে আপনি একটি চার্টে “জিতে” অন্য জায়গায় সমস্যার জন্ম দেবেন না।
একটি এক-ওই বাক্যে হাইপোথিসিস লিখুন যা প্রমাণযোগ্য এবং পূর্বাভাস আছে:
যদি আপনি প্রমাণ এবং প্রত্যাশিত মেট্রিক পরিবর্তন না বলতে পারেন, তাহলে হাইপোথিসিস টেস্টযোগ্য নয়।
ছোট, ফোকাসড এবং সহজে উল্টো করা যায় এমন পরিবর্তন করুন:
ছোট ডিফগুলো পরবর্তী পরিমাপকে অর্থবহ করে তোলে এবং আচরণ ভাঙার ঝুঁকি কমায়।
একই টেস্ট রেসিপি (একই ইনপুট, পরিবেশ, লোড) আবার চালান। ক্যাশ বা ওয়ার্ম-আপ নির্ভর হলে সেটাও স্পষ্ট করুন (উদাহরণ: "প্রথম রানের জন্য কোল্ড, পরের 5 রন ওয়ার্ম")।
তুলনা করতে একই মেট্রিক ও পারসেন্টাইল ব্যবহার করুন। গড় সহজেই সমস্যা ঢেকে দিতে পারে—p95 ও p99 দেখুন, থ্রুপুট ও CPU-ও নজরে রাখুন। নম্বর স্থির হয় কি না তা দেখতে পর্যাপ্ত রেপিটitions নিন।
উৎসব করার আগে রিগ্রেশনগুলো খতিয়ে দেখুন:
যদি উন্নতি প্রকৃত এবং রিগ্রেশন নেই, রাখুন; না হলে revert করে নতুন হাইপোথিসিস বানান বা আরও বিচ্ছিন্ন ভাবে পরীক্ষা করুন।
মেট্রিক এবং বেসলাইন রেকর্ড করুন সাথে পরিবেশ নোট (হার্ডওয়্যার, কনফিগ, ডেটা, ওয়ার্ম/কোল্ড ক্যাশ)।
চেকলিস্ট:
যদি নম্বরগুলো ভালো লাগে, দ্রুত একটি রিগ্রেশন পাস চালান: সঠিকতা, এরর রেট, টাইমআউট, মেমোরি, CPU, DB লোড ইত্যাদি পরীক্ষা করুন।