# সফটয়্যার ইঞ্জিনিয়ারিং: ব্যবহারিক আঙ্গিক-৫

> My thoughts on Software Engineering's practical aspects.

Published: 2012-11-29

> তুমি কখনোই একটা ভাল টিম ছাড়া একটা ভাল সফটয়্যার তৈরী করতে পারবে না এবং দূর্ভাগ্যজনক হলেও সত্য হচ্ছে প্রত্যেকটা টিমই অবুঝ প্রেমিকার মত আচরন করে। -- জন ম্যাকার্থি

**দলে কাজ করতে শেখা**

স্টুডেন্ট প্রজেক্টগুলোতে সাধারনত একটা টিমের বৈশিষ্ট্য থাকে-

- আপনার টিমের এক/দুইজন দক্ষ এবং বাকিরা নবীশ থাকে, আপনারা যে ক্ষেত্রে কাজ করতে চান সেখানকার ব্যাপারে।
- টিমের সাইজ ফিক্সড থাকে এবং এটা সাধারনত খুব বড় হয় না।
- আপনি প্রজেক্ট চলাকারীন সময়ে টিমমেম্বার বাড়াতে বা ছাটাই করতে পারবেন না।
- আপনি বাইরের কাইকে দিয়ে কাজ করিয়ে নিতে(আউটসোর্সিং) পারবেন না।

**টিমিং আপ**

আপনার উপর যদি দায়িত্ব থাকে টিম মেম্বার বাছাই করা তাহলে এটাকে গুরুত্ব সহকারে নিন। চেষ্টা করুন সেরা টিমটা নির্বাচন করতে। আর আপনাকে যদি কেউ টিমমেট হতে আহবান জানায় তাহলে তার পূর্বের প্রজেক্টটি দেখুন, সে কি করেছে? এছাড়া তার ব্যক্তিগত অন্যান্য কাজকর্মগুলোও লক্ষ্য করুন। আসলে যদি টিমমেটদের ওয়ার্কিং শিডিউল একই ধরনের হয় তাহলে কাজ করতে সুবিধা হয়। টিমের প্রত্যেক সদস্যের জীবন-যাপন স্টাইল এক রকম হলে সে টিম থেকে সর্বোত্তম আউটপুট পাওয়া সম্ভব। যেমন টিমের একজন সদস্য খুব সকালে ঘুম থেকে ওঠে আবার তাড়াতাড়ি ঘুমিয়ে পড়ে এবং অন্য একজন সদস্য দেরি করে ঘুম থেকে ওঠে এবং রাত জেগে কাজ করে। তাহলে এদের ওর্য়াকিং শিডিউল এক করা সম্ভব হবে না এবং টিমের কাছ থেকে ভাল ফলাফলও পাওয়া যাবে না। এছাড়া টিমের প্রত্যেক সদস্যের এক্সপেক্টেশন লেভেল এক হওয়া উচিৎ।

টিম তৈরী করার সময় টিমটা যাতে ব্যালান্স হয় সেদিকে লক্ষ্য রাথতে হবে। টিমের সবাই যদি শুধুমাত্র একটি বিষয়েই পারদর্শী হয় তাহলে কাজের আউটপুট ভাল হবে না। তাই টিম তৈরী করার সময়, ডিজাইনার, গ্রাফিক্যাল ইউজার ইন্টারফেস(GUI) এক্সপার্ট, প্রোগ্রামার, ডেটাবেজ এক্সপার্টদের সমন্বয়ে টিম তৈরী করা উচিৎ।

টিমে যদি আপনার ঘনিষ্ট বন্ধুরা থাকে তাহলে আপনি অনেক সুবিধা পাবেন, তবে এর অসুবিধাও আছে। আপনি এক্ষেত্রে কাজ করার সময় প্রফেশনাল এটমোস্ফিয়ার ধরে রাখতে পারবেন না। এছাড়া কোন সদস্য ঠিকমত কাজ করতে না পারলেও আপনি বন্ধুত্বের খাতিরে কিছু বলতেও পারবেন না। তবে এ সমস্যা কিভাবে সমাধান হবে তার উত্তর আমার জানা নেই।

একটা টেমর বিভিন্ন দিকে কাজ করতে হয়, এমনকি যেদিকে কোন সদস্যেরই দক্ষতা নেই সেদিকেও। এক্ষেত্রে প্রত্যেকটা অংশ ভাগ ভাগ করে একজন করে সদস্যকে সে অংশের দায়িত্ব দিয়ে দেয়া উচিৎ। তার কাজ হবে সে অংশ সম্পর্কে যথাযত ধারনা অর্জন করা এবং টিমের অন্যান্য সদস্যদেরকে তা জানানো। উদাহরনসরূপ, যে টেস্টিংয়ের দায়িত্বে থাকবে তার দায়িত্ব হচ্ছে বিভিন্ন টেস্টিং টুল সম্পর্কে জানা, টেস্টিং পলিসি কি হবে সেটা নির্ধারন করা, টেস্ট প্ল্যান নির্ধারন করা, টেস্টিংয়ের সময় কিভাবে ট্রাবলশুটিং করা হবে সেটা জানা এবং সদস্যদেরকে সেটা জানানো।

টিমের প্রত্যেক সদস্যদের কেমন হওয়া উচিৎ তা নিয়ে একটা কথা খুব প্রচলিত আছে,

> Jack of all trades and a master of at least one.

অর্থাৎ প্রত্যেক সদস্যের সব বিষয়েই একটা মোটামুটি ধারনা থাকতে হবে এবং কমপক্ষে একটা ক্ষেত্রে ভাল দক্ষতা থাকতে হবে।

আরেকটা জিনিসের দিকে লক্ষ্য রাখা উচিৎ। একটা স্টুডেন্ট প্রজেক্টের প্রায় সকলেই নবীশ থাকে। এক্ষেত্রে কোন একটা সেক্টেরের মাস্টার হতে হলে তার পেছনে যথেষ্ট সময় ব্যয় করতে হবে। আর আপনার পছন্দের ক্ষেত্রটিই যদি আপনি মাস্টার হবার জন্য নির্বাচন করেন, তাহলে সে ক্ষেত্রে কাজটা আরো সহজ হয়ে যায়।
