What is Software Engineering?

অনেক দিন আগে (আনুমানিক ২ বছর) আমি নিজের স্কিল বাড়ানোর জন্য একটা সফটওয়্যার (ওয়েব অ্যাপ্লিকেশান) বানায়। মোটামুটি সবকিছু ঠিক ঠাকই ছিল। ওইসময় সব কিছুই যেমন টা চেয়েছিলাম তেমনই টায় হয়েছিল। ওই অবস্থায় কোড যা আছে সব গিটহাবে রেখে দিয়েছিলাম। এখনো আছে। এখন মনে হল , অনেক দিন তো হল, অ্যাপ তো বানিয়েছি এখন কিছু নতুন ফিচার অ্যাড করা জরুরি। আর প্যাকেজ গুলো আপডেটও করা দরকার। কবে প্যাকেজ গুলো deprecated করে দিবে কে জানে। গিটহাবে রিপো ওপেন করলাম। ক্লোন করলাম । ক্লোন করার পর , প্রজেক্ট সেটাপ করতে যেয়ে পড়া এক মহাবিপদ। প্রোজেক্ট সেটআপ এর জন্য ডকুমেন্টেশন নেই। এই প্রজেক্ট কিভাবে রান করতে হবে তার কোন গাইড লাইন নেই। প্রয়োজনীয় বিভিন্ন এনভায়রনমেন্ট ভ্যারিবল কি কি সেটা করা লাগবে তাও নেই। এই অবস্থায় একটু কষ্ট করে সব কিছু সেটাপ করলাম। এখানে আমার প্রায় ১ঘন্টা সময় চলে গেল। যাক বাবা , ভালো ভাবে প্রজেক্ট রান করা গেছে। খুবই ভালো কথা। এবার তাহলে ফিচার অ্যাড করার কথা চিন্তা করা যায়। কিন্তু যেই ফিচার অ্যাড করার জন্য কোড ওপেন করলাম। আবার পড়লাম আরেক বিপদে । বিপদটা হচ্ছে কোন ফাইল কোথায় রাখা আছে কিছুই তো জানি না। সব ভুলে গেছি। কি আর করা ফিচার তো অ্যাড করা লাগবে কিছু তো করার নেই। যাই হোক, লেগে পড়লাম ফাইল এক্সপ্লোর করতে। যেহেতু কোড আমি নিজেই করেছিলাম এই জন্য বেশি সময় লাগলো না। বেশি না, এই ৩০ মিনিট মত সময় লেগে গেল। এখন কোড গুলো মোটামুটি মাথায় ধরছে। সহজ কোথায় কোন জিনিস রাখা আছে সেগুলো মাথায় চলে আসছে। তাহলে সব কিছু রেডি হয়ে গেছে। এখন ফিচার অ্যাড করার পালা। লেগে পড়লাম কাছে। দীর্ঘ ৪ ঘন্টা করার পর একটা ছোট ফিচার অ্যাড করলাম। গিটহাবে পুশ করলাম। সার্ভারে আপলোড করলাম সেখানে আরো ১ ঘন্টা লেগে গেল। সব কিছু ঠিকঠাক। যাক হাফ ছেড়ে বাচলাম। এখানে অনেক গুলো বিষয় আছে যেগুলো না করার কারনে আমার অযথা প্রায় ৩-৪ ঘন্টা সময় নষ্ট হয়ে গেছে। তবে দুই বিষয় অতীব জরুরি। প্রথমত, একটা পরিপূর্ণ ডকুমেন্টেশন থাকা প্রয়োজন ছিল। দ্বিতীয়ত , রিপিটিভ কাজ গুলো অটোমেট করার প্রয়োজন ছিল। এছাড়া খুটিয়ে দেখলে অনেক প্রবলেম সামনে আসবে। এখন প্রশ্ন হছে, এত ফাউ তো বকচি, এর সাথে সফটওয়্যার ইঞ্জিনিয়ারিং এর সম্পর্ক কি? সম্পর্ক আছে, অবশই আছে। What is software? সফটওয়্যার ইঞ্জিনিয়ারিং জানার আগে সফটওয়্যার সর্ম্পর্কে জানা তো প্রয়োজন, সহজভাবে বললে , সফটওয়্যার হল একটু নির্দেশনা বা প্রোগ্রাম যা কম্পিউটারকে নির্দিষ্ট কার্য সম্পাদনের জন্য নির্দেশ করে এবং সমস্যা সমাধান করে থাকে। সফটওয়্যার মুলত দুই ধরনেরঃ ১। জেনেরিক্স সফটওয়্যারঃ এই ধরনের সফটওয়্যার গুলো মুলত বিভিন্ন কোম্পানি বা প্রতিষ্ঠান ডেভোলোপ করে করে থাকে এবং সাধারন ব্যবহারকারীরা সেগুলো ব্যবহার করে। উদাহরনস্বরুপঃ MS Office, Google Chrome, VS Code ইত্যাদি। এখানে মূল বিষয় হচ্ছে কোম্পানি তাদের মত করে বিভিন্ন ফিচার অ্যাড করে থাকে। ২। কাস্টমাইজড সফটওয়্যারঃ এটা জেনেরিক্স এর সম্পূর্ন উলটা। এই সফটওয়্যার গুলো ব্যবহার কারীর (ক্লায়েন্ট) প্রয়োজন অনুসারে তৈরী করা হয়। What is Software Engineering? আমাদের দেশে অনেকেই মনে করে কম্পিউটার সায়েন্স এবং সফটওয়্যার ইঞ্জিনিয়ারিং একই জিনিস। কিন্তু মজার বিষয় হচ্ছে, দুইটা জিনিস একই রকম মনে হলেও এদের মধ্যে রয়েছে আকাশ পাতাল পার্থক্য। সফটওয়্যার ইঞ্জিনিয়ারিং হলো একটা ইঞ্জিনিয়ারিং ডিসিপ্লিন যেটা একটা সফটওয়্যার তৈরি থেকে শুরু করে এটা ব্যবহারকারীর কাছে পৌছানোর পরে তা মেইনটেইন করা পর্যন্ত সকল বিষয় গুলো কে ডিল করে। এখানে দুইটা বিষয় উল্লেখ্য প্রথমত, ইঞ্জিনিয়ারিং ডিসিপ্লিন , ইঞ্জিনিয়াররা বিভিন্ন থিওরি , পদ্ধতির মাধ্যমে কার্য সম্পাদন করে থাকে। তারা চেষ্টা করে সব থেকে সেরা (যেটা ইঞ্জিনিয়ারিং জন্য অধিক গ্রহনযোগ্য) পদ্ধতি টা নির্বাচন করতে। অনেক সময় সমস্যা সমাধানের জন্য নতুন পদ্ধতি এক্সপ্লোর করার প্রয়োজন হয়। তবে তারা বিভিন্ন বাধ্যবাধকতার ভিতরে কাজ করে থাকে। এক্ষেতে তারা বাজেট এবং সময় কে মূল্যায়ন করে থাকে। দ্বিতীয়ত, সসফটওয়্যার সকল বিষয়, সফটওয়্যার ইঞ্জিনিয়ারিং শুধুমাত্র প্রোগ্রামিং নিয়ে ডিল করে না। প্রজেক্ট ম্যানেজমেন্ট, পদ্ধতি, থিওরিস, বিভিন্ন টুল কিভাবে ব্যবহার করা যায়, প্রোজেক্ট প্লানিং ইত্যাদি বিষয় গুলো ডিল করে। সফটওয়্যার ইঞ্জিনিয়ারিং মুলত পেশাগত সফটওয়্যার কে সাপোর্ট করার জন্য। কোন ব্যক্তিগত প্রোগ্রার কে সাপোর্ট করার জন্য এটা না। তবে একজন চাইলে সফটওয়্যার ইঞ্জিনিয়ারিং কে নিজের জন্য ব্যবহার করতেই পারেন। প্রোজেক্ট ম্যানেজমেন্ট এর মধ্যে একটা গুরুত্ব পূর্ণ বিষয় হচ্ছে প্রোজেক্ট এর ডকুমেন্টশন তৈরি করা। আমার ওই প্রজেক্ট কি কোন ডকুমেন্টশন ছিল? ছিল না। যার কারনে অনেকটা সময় লাগিয়ে প্রোজেক্ট সেটআপ করতে হয়েছে। আবার একই কারনে ফোল্ডার এবং ফাইল ওপেন করে ফাইল স্ট্রাকচার বুঝতে হয়েছে। এর পরে কোড পুশ করার পর মানুয়ালি কোড সার্ভারে পুশ করতে হয়েছে। আমি একজন ব্যক্তি এই কাজ করছি খুব বেশি প্রবলেম হচ্ছে না। কিন্তু একবার ভাবুন তো। এই প্রোজেক্ট এ ১০-১২ জন কাজ করছে। তখন বিষয়টা কেমন হবে। প্রতিবার যদি তাদের প্রজেক্ট সেটাপ করা লাগে তাহলে কতটা সময় নষ্টা হবে। সফটওয়্যার ইঞ্জিনিয়ারিং একটা গুরুত্বপূর্ণ বিষয় হলো বাজেট এবং সময়ের মাধ্যমে গুনমত মান সম্পন্ন সফটওয়্যার ডেলিভারি করা। এখন প্রজেক্টা সেটাপ থেকে শুরু করে ফিচার অ্যাড সহ সার্ভারে পুশ করা পর্যন্ত কতটা টা সময় নষ্ট হচ্ছে একবার চিন্তা করুন। এখানে সমাধান হচ্ছে, প্রোজেক্ট এর জন্য একটা প্রোপার ডকুমেন্টশন তৈরি করা। রিপিটেটিভ কাজ গুলো অটোমেট করা। Why software engineering is important? একটা জিনিস , আমি তো আমার অ্যাপের নতুন ফিচার সার্ভারে পুশ করে দিয়েছে তার খবর নিবেন না? তার খবর খুবই খারাপ , অ্যাপ ক্রাশ করেছে। বিষয়টা একটা খতিয়ে দেখলাম, দেখে যা বুঝলাম তা হচ্ছে , নতুন কোড পুশ করার কারনে সিস্টেম এর রিসোর্স অধিকমাত্রায় ব্যবহৃত হচ্ছে। অন্য ব্যবহারকারীরা রিকুয়েষ্ট করলেই ক্রাশ করছে। বিষয় নিয়ে একটু ঘাটাঘ

Apr 26, 2025 - 17:32
 0
What is Software Engineering?

অনেক দিন আগে (আনুমানিক ২ বছর) আমি নিজের স্কিল বাড়ানোর জন্য একটা সফটওয়্যার (ওয়েব অ্যাপ্লিকেশান) বানায়। মোটামুটি সবকিছু ঠিক ঠাকই ছিল। ওইসময় সব কিছুই যেমন টা চেয়েছিলাম তেমনই টায় হয়েছিল। ওই অবস্থায় কোড যা আছে সব গিটহাবে রেখে দিয়েছিলাম। এখনো আছে।

এখন মনে হল , অনেক দিন তো হল, অ্যাপ তো বানিয়েছি এখন কিছু নতুন ফিচার অ্যাড করা জরুরি। আর প্যাকেজ গুলো আপডেটও করা দরকার। কবে প্যাকেজ গুলো deprecated করে দিবে কে জানে।

গিটহাবে রিপো ওপেন করলাম। ক্লোন করলাম । ক্লোন করার পর , প্রজেক্ট সেটাপ করতে যেয়ে পড়া এক মহাবিপদ।

প্রোজেক্ট সেটআপ এর জন্য ডকুমেন্টেশন নেই। এই প্রজেক্ট কিভাবে রান করতে হবে তার কোন গাইড লাইন নেই। প্রয়োজনীয় বিভিন্ন এনভায়রনমেন্ট ভ্যারিবল কি কি সেটা করা লাগবে তাও নেই।

এই অবস্থায় একটু কষ্ট করে সব কিছু সেটাপ করলাম। এখানে আমার প্রায় ১ঘন্টা সময় চলে গেল। যাক বাবা , ভালো ভাবে প্রজেক্ট রান করা গেছে। খুবই ভালো কথা। এবার তাহলে ফিচার অ্যাড করার কথা চিন্তা করা যায়।

কিন্তু যেই ফিচার অ্যাড করার জন্য কোড ওপেন করলাম। আবার পড়লাম আরেক বিপদে । বিপদটা হচ্ছে কোন ফাইল কোথায় রাখা আছে কিছুই তো জানি না। সব ভুলে গেছি। কি আর করা ফিচার তো অ্যাড করা লাগবে কিছু তো করার নেই। যাই হোক, লেগে পড়লাম ফাইল এক্সপ্লোর করতে। যেহেতু কোড আমি নিজেই করেছিলাম এই জন্য বেশি সময় লাগলো না। বেশি না, এই ৩০ মিনিট মত সময় লেগে গেল। এখন কোড গুলো মোটামুটি মাথায় ধরছে। সহজ কোথায় কোন জিনিস রাখা আছে সেগুলো মাথায় চলে আসছে।

তাহলে সব কিছু রেডি হয়ে গেছে। এখন ফিচার অ্যাড করার পালা। লেগে পড়লাম কাছে। দীর্ঘ ৪ ঘন্টা করার পর একটা ছোট ফিচার অ্যাড করলাম। গিটহাবে পুশ করলাম। সার্ভারে আপলোড করলাম সেখানে আরো ১ ঘন্টা লেগে গেল। সব কিছু ঠিকঠাক। যাক হাফ ছেড়ে বাচলাম।

এখানে অনেক গুলো বিষয় আছে যেগুলো না করার কারনে আমার অযথা প্রায় ৩-৪ ঘন্টা সময় নষ্ট হয়ে গেছে। তবে দুই বিষয় অতীব জরুরি।

প্রথমত, একটা পরিপূর্ণ ডকুমেন্টেশন থাকা প্রয়োজন ছিল।

দ্বিতীয়ত , রিপিটিভ কাজ গুলো অটোমেট করার প্রয়োজন ছিল।

এছাড়া খুটিয়ে দেখলে অনেক প্রবলেম সামনে আসবে।

এখন প্রশ্ন হছে, এত ফাউ তো বকচি, এর সাথে সফটওয়্যার ইঞ্জিনিয়ারিং এর সম্পর্ক কি?

সম্পর্ক আছে, অবশই আছে।

What is software?

সফটওয়্যার ইঞ্জিনিয়ারিং জানার আগে সফটওয়্যার সর্ম্পর্কে জানা তো প্রয়োজন,

সহজভাবে বললে , সফটওয়্যার হল একটু নির্দেশনা বা প্রোগ্রাম যা কম্পিউটারকে নির্দিষ্ট কার্য সম্পাদনের জন্য নির্দেশ করে এবং সমস্যা সমাধান করে থাকে।

সফটওয়্যার মুলত দুই ধরনেরঃ

১। জেনেরিক্স সফটওয়্যারঃ এই ধরনের সফটওয়্যার গুলো মুলত বিভিন্ন কোম্পানি বা প্রতিষ্ঠান ডেভোলোপ করে করে থাকে এবং সাধারন ব্যবহারকারীরা সেগুলো ব্যবহার করে। উদাহরনস্বরুপঃ MS Office, Google Chrome, VS Code ইত্যাদি। এখানে মূল বিষয় হচ্ছে কোম্পানি তাদের মত করে বিভিন্ন ফিচার অ্যাড করে থাকে।

২। কাস্টমাইজড সফটওয়্যারঃ এটা জেনেরিক্স এর সম্পূর্ন উলটা। এই সফটওয়্যার গুলো ব্যবহার কারীর (ক্লায়েন্ট) প্রয়োজন অনুসারে তৈরী করা হয়।

What is Software Engineering?

আমাদের দেশে অনেকেই মনে করে কম্পিউটার সায়েন্স এবং সফটওয়্যার ইঞ্জিনিয়ারিং একই জিনিস। কিন্তু মজার বিষয় হচ্ছে, দুইটা জিনিস একই রকম মনে হলেও এদের মধ্যে রয়েছে আকাশ পাতাল পার্থক্য।

সফটওয়্যার ইঞ্জিনিয়ারিং হলো একটা ইঞ্জিনিয়ারিং ডিসিপ্লিন যেটা একটা সফটওয়্যার তৈরি থেকে শুরু করে এটা ব্যবহারকারীর কাছে পৌছানোর পরে তা মেইনটেইন করা পর্যন্ত সকল বিষয় গুলো কে ডিল করে।

এখানে দুইটা বিষয় উল্লেখ্য

  • প্রথমত, ইঞ্জিনিয়ারিং ডিসিপ্লিন , ইঞ্জিনিয়াররা বিভিন্ন থিওরি , পদ্ধতির মাধ্যমে কার্য সম্পাদন করে থাকে। তারা চেষ্টা করে সব থেকে সেরা (যেটা ইঞ্জিনিয়ারিং জন্য অধিক গ্রহনযোগ্য) পদ্ধতি টা নির্বাচন করতে। অনেক সময় সমস্যা সমাধানের জন্য নতুন পদ্ধতি এক্সপ্লোর করার প্রয়োজন হয়। তবে তারা বিভিন্ন বাধ্যবাধকতার ভিতরে কাজ করে থাকে। এক্ষেতে তারা বাজেট এবং সময় কে মূল্যায়ন করে থাকে।

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

সফটওয়্যার ইঞ্জিনিয়ারিং মুলত পেশাগত সফটওয়্যার কে সাপোর্ট করার জন্য। কোন ব্যক্তিগত প্রোগ্রার কে সাপোর্ট করার জন্য এটা না। তবে একজন চাইলে সফটওয়্যার ইঞ্জিনিয়ারিং কে নিজের জন্য ব্যবহার করতেই পারেন।

প্রোজেক্ট ম্যানেজমেন্ট এর মধ্যে একটা গুরুত্ব পূর্ণ বিষয় হচ্ছে প্রোজেক্ট এর ডকুমেন্টশন তৈরি করা। আমার ওই প্রজেক্ট কি কোন ডকুমেন্টশন ছিল? ছিল না। যার কারনে অনেকটা সময় লাগিয়ে প্রোজেক্ট সেটআপ করতে হয়েছে। আবার একই কারনে ফোল্ডার এবং ফাইল ওপেন করে ফাইল স্ট্রাকচার বুঝতে হয়েছে। এর পরে কোড পুশ করার পর মানুয়ালি কোড সার্ভারে পুশ করতে হয়েছে।

আমি একজন ব্যক্তি এই কাজ করছি খুব বেশি প্রবলেম হচ্ছে না। কিন্তু একবার ভাবুন তো। এই প্রোজেক্ট এ ১০-১২ জন কাজ করছে। তখন বিষয়টা কেমন হবে। প্রতিবার যদি তাদের প্রজেক্ট সেটাপ করা লাগে তাহলে কতটা সময় নষ্টা হবে। সফটওয়্যার ইঞ্জিনিয়ারিং একটা গুরুত্বপূর্ণ বিষয় হলো বাজেট এবং সময়ের মাধ্যমে গুনমত মান সম্পন্ন সফটওয়্যার ডেলিভারি করা। এখন প্রজেক্টা সেটাপ থেকে শুরু করে ফিচার অ্যাড সহ সার্ভারে পুশ করা পর্যন্ত কতটা টা সময় নষ্ট হচ্ছে একবার চিন্তা করুন।

এখানে সমাধান হচ্ছে, প্রোজেক্ট এর জন্য একটা প্রোপার ডকুমেন্টশন তৈরি করা। রিপিটেটিভ কাজ গুলো অটোমেট করা।

Why software engineering is important?

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

এখন এই রকম অবস্থায় আমার অ্যাপস ইউজার রা কি আর ব্যবহার করবে? এখানে তাদের বিশ্বাস নষ্ট হবে। আমার অ্যাপ এর নির্ভরযোগ্য তা কমে যাবে। এই অবস্থায় আমার কাছে দুই টা অপশন খোলা আছে।

প্রথম, সার্ভারে রিসোর্স এর পরিমান বৃদ্ধি করা
দ্বিতীয়, কোড অপটিমাইজ করা

আমার কি করা উচিত?

এখানে আমি যদি লম্বা সময়ের কথা চিন্তা করি তাহলে ভবিষ্যতে এই প্রোজেক্ট একটা মেইনটেইন করা সম্ভব না। সেজন্য অনেক লোক দরকার হবে। এই দিকে থেকে চিন্তা করলে আমার কোড অপ্টিমাইজ করা টা ভালো অপশন হবে। সব থিওরি ও মেথড ফলো করে যদি সিস্টেম টা ঠিক করতে পারি তাহলে, লম্বা সময়ের জন্য এই রকম মেজর কোন সমস্যা সৃষ্টির সম্ভাবনা কমে যাবে । আবার খরচ ও তুলনামূলক ভাবে কমে আসবে।

সফটওয়্যার ইঞ্জিনিয়ারিং মুলত এই দুইটা কারনের জন্যই গুরুত্বপূর্ণ।

১। বাজেট এবং সময়ের মধ্যে নির্ভরযোগ্য ও বিশ্বাস যোগ্য সিস্টেম তৈরি করতে হয়। এর জন্য সফটওয়্যার ইঞ্জিনিয়ারিংর মেথড গুলো অত্যাবশ্যকীয়।

২। যখন লম্বা সময়ের কথা চিন্তা করে সিস্টেম তৈরি করা হয়, সেক্ষেত্রে সফটওয়্যার ইঞ্জিনিয়ারিং এর মেথড খুব গুলো কাজে লাগে। মুলত সফটওয়্যার ইঞ্জিনিয়ারিং কারনে তুলনা মুলক ভাবে খরচ অনেক কমে যায়।

তবে এখানে মনে রাখার বিষয় হচ্ছে সফটওয়্যার ইঞ্জিনিয়ারিং কোন ব্যক্তিগত কোন প্রোজেক্ট বা প্রোগ্রামিং এর জন্য একদম না।

Fundamental to apply all systems
যেহেতু সফটওয়্যার ইঞ্জিনিয়ারিং কোন ব্যক্তিগত প্রোগ্রামিং এর জন্য না। সেহেতু যারা এর পদ্ধতি গুলো ব্যবহার করবে তাদের বেশির ভাগ হবে টিম, গ্রুপ অথবা কোন প্রতিষ্ঠান।

এখন তারা (এই সব গ্রুপ ) যদি কোন সফটওয়্যার তৈরি করে সেক্ষেত্রে কিছু জিনিস ব্যবহার করতে পারে।

১। তাদের উচিত হবে একটা বোধ্যগম্য এবং সহজে ম্যানেজ করা যায় এমন প্রসেস এর মধ্য দিয়ে সসফটওয়্যার তৈরির কাজ গুলো সম্পন্ন করা। তাদের উচিত হবে সফটওয়্যার তৈরি জন্য একটা সুন্দর প্লান তৈরি করা। প্লান টা কার্যকর করতে হলে অবশ্যই সফটওয়্যারটি কম্পিলিট হলে কেমন হবে তা সম্পর্কে একটা পরিষ্কার ধারনা থাকতে হবে। তবে ক্ষেত্র বিশেষে প্রসেস ভিন্ন ভিন্ন হতে পারে।

২। সফটওয়্যার কোন রকম কোন প্রবলেম অথবা ফেইলর ছাড়া কাঙ্ক্ষিত ফলাফল প্রদান করে এটা নিশ্চিত করা । সাথে সাথে যখন প্রয়োজন তখন যেন available থাকে সেটা নিশ্চিত করা।

৩। Software Specification and Requirements এ জানতে হবে যে গ্রাহক এই সফটওয়্যার থেকে কি চাই এবং তার এই চাহিদা গুলো ম্যানেজ করতে হবে। কোনটা সম্ভব ,কোনটা সম্ভব না , কতদিন লাগবে, কেমন খরচ হবে , ইত্যাদি বিষয়গুলো ম্যানেজ করা।

৪। রিসোর্স যা আছে , সেগুলো সর্বোচ্চ (যত টুকু সম্ভব) ব্যবহার করতে হবে। যে সফটওয়্যার অলরেডি তৈরি করা আছে, সে গুলো নতুন করে তৈরি না করে পূনব্যবহার করা। এতে রিসোর্স এর সুষ্ঠ ব্যবহার করা সম্ভব হবে।

Software engineering Ethics

Software engineering একটি সম্মানীয় এবং মর্যাদা সম্পন্ন পেশা। তাই এই সম্মান এবং মর্যাদা রক্ষার স্বার্থে একজন software engineer কে নীতি নৈতিকতা মেনে দৈনন্দিন কার্যক্রম চালিয়ে যেতে যায়। software engineer এর জন্য কিছু নীতি নৈতিকতা রয়েছে। তন্মধ্যে

১। গোপনীয়তা রক্ষা করাঃ আপনার কখনো উচিত হবে না, আপনার কম্পানি এবং কম্পানির ক্লায়েন্ট সম্পর্কে তথ্য ফাস করা।

২। যোগ্যতা বাইরে কাজ না করাঃ আপনি যে জিনিস পারেন না বা বোঝেন না, সেই জিনিস কাজ জেনে বুঝে করা কখনোই উচিত না। এক্ষেত্রে আপারকতা স্বিকার করা করা উচিত। তাদের বলা উচিত , এটা আমার জ্ঞানের বাইরে।

৩। intellectual property rights: আপনার উচিত intellectual property rights এর বিষয়ে স্থানীয় সরকারে কি ধরনের আইন কানুন বিদ্যমান রয়েছে এবং আপনার কোম্পানির এসব intellectual property rights এর ব্যাপারে সর্তক থাকা।

৪। কম্পিউটারের অপব্যবহারঃ অন্যের কম্পিউটারকে আপ্রাসঙ্গিক কাজে(গেম খেলা) ব্যবহার করা থেকে বিরত থাকা।