گفتگو با مهرداد آگاه
خردادماه 1382

 بلاهايي كه ما بر سر مشتريانمان مي‌آوريم!

حالا بيا كمي هم درباره كار خودمان صحبت كنيم. "سايت درست كردن" ما براي تو. توي صحبت‌هايت اشاره كردي كه در برنامه زمانبندي انتظار داشتي اين بخش از كار خيلي پيشتر تمام شود و به نتيجه برسد ولي خب همچنان كار ادامه دارد! در كار ما بحث "زمان" اغلب بزرگ‌ترين تهديد محسوب مي‌شود و مهم‌ترين موضوعي است كه اغلب باعث مي‌شود كلاهمون با كارفرما تو هم برود! ما در "اينطرف ميز" به عنوان مجري اين مساله بيشتر مواقع معترضيم كه "كارفرما نم‌يداند چه مي‌خواهد!"، "كارفرما در ميانه كار تعريفش را از كار و خواسته‌هايش عوض مي‌كند!" و ... از آن طرف كارفرمايان "آن طرف ميز" هم همواره انتقادات و ايرادات خاص خودشان را گرفته‌اند و اين "جدال صنفي" همواره ادامه داشته است. تو همچنين خيلي خوب اشاره كردي كه اين عقب‌افتادن‌ها و تاخيرها چقدر روي مجموعه كار و كاسبي‌ات تاثيرگذار بوده. پس نمي‌شود اهميت اين موضوع را ناديده گرفت. همه مي‌دانيم وقتي زمان يك فعاليت در يك نمودار "گانت" بيش از آنكه پيش‌بيني شده به درازا مي‌كشد، چه افتضاحي در مجموعه فعاليت‌هاي بعدي و حتي موازي با آن ممكن است بوجود بيايد.
كار تو كمي در شروع هم با مقداري "دست‌انداز" شروع شد. پس بيا از اينجا شروع كنيم كه كار چگونه شروع شد و تو خودت به اينجا كه رسيده‌ايم چه مشكلاتي را مي‌بيني كه الان اگر مي‌شد دوباره از اول شروع كني، با انتخاب يا رفتار متفاوتي مي‌شد از وقوع و بروز آنها جلوگيري كرد.

آگاه: من فكر مي‌كنم بزرگترين مشكل از ابتدا اين بود كه من كمي ابعاد اجرايي كار را دست كم گرفتم و كوچك برآورد كردم. از لحاظ وسعت كار تغيير چنداني تا اين لحظه بوجود نيامده. يعني من از همان اول هم مي‌دانستم كه نرم‌افزار مورد نظرم چه خصوصيات و ويژگي‌هايي بايد داشته باشد و در طول كار هم خيلي بر اين ابعاد اضافه نشده. به نوعي الگوي من سايت‌هاي مشابه خارجي، مثلا Monster، بودند كه در اين زمينه فعال هستند. بگذريم كه حالا كه به آخرهاي كار رسيده‌ايم به نظرم مي‌آيد نتيجه در بعضي موارد با توجه به خصوصيات ايران شايد از خيلي از اين سايت‌هاي حرفه‌اي هم حرفه‌اي‌تر از آب درآمده.
اما در بعد اجرايي من كار را دست كم گرفتم. شايد آشنايي پايه‌اي من با مقولات كامپيوتر و برنامه‌نويسي باعث شد تا در بعضي مواقع تصورات يا انتظارات بيشتري داشته باشم. در حالي كه بعد در عمل آمدم و ديدم بيش از آنچه كه من به نظرم رسيده زمان مي‌برد. اشتباه ديگري كه در اجراي اين پروژه اتفاق افتاد و بعدا متوجه شدم اين بود كه اينجور كارها اگر دست به دست شوند و از ميانه به تيم و گروه ديگري سپرده شوند خيلي مشكل ايجاد مي‌شود. مساله اين نيست كه تيم اول بهتر باشد يا گروه دوم. خود انتقال باعث مي‌شود كه با مسائلي روبرو بشويم كه "زمانبر" هستند. عادات برنامه‌نويسي بين افراد و گروه‌هاي مختلف متفاوت است. استانداردها، اسم‌گذاري فايل‌ها و نام‌گذاري ميدان‌هاي اطلاعاتي. اغلب هم فني‌ها ترجيح مي‌دهند به جاي ادامه خط و مسير گروه قبلي دوباره طرح خودشان را دربياندازند!
من در آغاز كار خودم نشستم و ساختار اطلاعاتي (Data Structure) مورد نظرم را با كمك برنامه Access تعريف كردم. اين مساله اتفاقا قدم مثبتي بود چون هم كار ارتباط و انتقال خواسته‌ها را تسريع كرد و هم بخشي از كار را به اين ترتيب جلو انداخت. در آغاز كار من تصميم گرفتم كه بخش فني كار را با كمك يك گروه ديگر به پيش ببرم و از شما بخواهم كه بطور موازي بر روي مباحث طراحي گرافيكي و بصري سايت كار كنيد. تصور من اتفاقا اين بود كه اين "موازي‌سازي" موجب تسريع كار مي‌شود. اما بعد كه ديدم ابعاد اجرايي كار بزرگتر از آن چيزي است كه اول پيش‌بيني كرده بودم، بخش پياده‌سازي فني هم به نگاه منتقل شد و كار ادامه يافت. همين انتقال بود كه به جاي آنكه به هرحالت فقط يك دست به دست شدن ساده باشد باعث شد تا بعضي مواقع حتي قسمت‌هايي كه رويشان قبلا كار شده بود، كاملا بازنويسي شوند. در حقيقت در همان مقطع هم تصور من اين بود كه كار فني را تيم اول به پايان برده اما بعد كه آن قسمت از كار تحويل شما شد تا شما به اصطلاح خودتان "لباس تنش كنيد" متوجه شديم كه هنوز بخش‌هايي از كار باقيمانده كه بايد انجام بشود . شما بررسي كرديد و از آن نقطه تخمين زديد كه در طول سه ماه كل كار به انجام خواهد رسيد كه تا اين لحظه تصور مي‌كنم دو برابر آن مقدار زمان گذشته است!

اول از هرچيز بگذار من اين را بگويم كه با تمام اين كش و واكش‌ها پروژه تو براي ما كار شسته رفته‌اي بود. همين كه يك كارفرمايي داشته باشيم كه با موضوع آشنا باشد، بداند چه مي‌خواهد و حتي بنشيند ساختار اطلاعاتي مورد نيازش را خودش در Access ايجاد كند، جزو نوادر است! براي همين هم هست كه ازت خواهش كردم تا بيايي با هم بنشينيم و يكبار اين مسيري را كه طي كرده‌ايم با هم مرور كنيم تا ببينيم گير كار در كجاست. چون ما با همه اين مشكلات را داريم! البته انتظار ندارم كه الان ما به يك راه‌حل سحرآميزي برسيم كه كليه مشكلات زندگي‌مان را برطرف كند.
ولي حالا بگذار من هم از طرف خودمان تعريف كنم. من خيلي در جريان جزئيات دقيق پروژه تو نبوده‌ام. اتفاقا ديد من از يك جايگاه مديريتي كه همه‌اش دارد نق مي‌زند كه "پس چرا اين پروژه آگاه تمام نمي‌شود!" اين است كه يكروزي همكاران من اطلاعاتي از تو گرفتند و بر پايه آن به من هم گفتند كه اينكار سه ماه طول مي‌كشد! اما بعد توي رفت و برگشت‌هايي كه معمول اينجور كار است تا تو نتيجه كار را ببيني و تصحيحات و تغييراتت را اعلام كني، چيزهايي يا اضافه شد يا جزئيات بيشتري ازشان مشخص شد. باز تاكيد مي‌كنم كه اين اتفاقي است كه هميشه مي‌افتد. و همين جزئياتي كه به مرور مشخص مي‌شود، مي‌خواهي اسمش را بگذاريم ريزه‌كاري‌ها، باعث مي‌شود كه آن تخمين اوليه بعد از يك مدت ديگر خيلي رويايي به نظر برسد.
حالا سوال من اين است كه آيا توي كار خودت به نظرت عملي مي‌رسيد كه ما قبل از شروع كار با همديگر مي‌نشستيم و مطابق آنچه كه در كتاب‌هاي مهندسي نرم‌افزار به آن توصيه مي‌كنند كليه جزئيات و "ريزه‌كاري‌ها" را مشخص مي‌كرديم؟ بگذريم كه اين مساله از ديد من يك بحث قابليت كارفرما را هم با خود دارد كه آيا اصولا او تا چه اندازه‌اي مي‌تواند در ذهنش به جزئيات چيزي كه در نظر دارد واقف باشد و آيا چقدر امكان و "تخصص" انتقال ذهنيتش به من مجري را در اختيار دارد؟
يك بحث ديگري هم هست كه كارفرما اصلا چقدر تحمل زمان گذاشتن براي يك چنين مرحله‌اي را دارد؟ چون با بعضي‌ها هم ما اين درگيري را داريم كه مدعي هستيم يك چنين كاري بايد انجام بشود اما كارفرما مايل است زودتر "كار" شروع شود و شاهد "بالا آمدن ديوار" باشد. پس حاضر نمي‌شود براي كشيده شدن نقشه ساختمان منتظر بماند و وقت بگذارد!

آگاه: من با اين ديد و پيشنهاد كاملا موافقم. يعني فكر مي‌كنم اگر در كار من كمي بيشتر در ابتدا هر دو طرف وارد بحث مشخص كردن جزئيات مي‌شديم، مطمئنا مي‌توانستيم تخمين بهتري بدست بياوريم. همانطور كه گفتم من با يك ساختار اطلاعاتي پيش شما آمدم و اينكه مي‌گويم ابعاد كلي كار در طول اين مدت تغيير چنداني نكرده، شاهدش اين است كه تغييرات زيادي در آن ساختار اوليه اتفاق نيافتاده. ولي در طول كار من متوجه شدم جزئيات مربوط به شيوه نمايش و استفاده از اين ساختار در رابط كاربر سايت مساله‌اي است كه باعث كم و زياد شدن زمان مورد نياز براي پياده‌سازي مي‌شود و واقعا هم من از ابتدا در مورد جزئيات فكر نكرده بودم. اينها همان جزئياتي هستند كه در آن جلسات مختلف حين اجرا به مرور مشخص شدند و احيانا باعث كش آمدن كار هم شده‌اند. بنابراين شايد اگر از همان ابتدا مي‌نشستيم و جزئيات بيشتري از رابط كاربر مورد نظرم، امكاناتي كه در صفحات لازم دارم و شماي كلي صفحات طراحي مي‌كرديم علاوه بر آنكه امكان تخمين زماني دقيق‌تري بوجود مي‌آمد در پيشبرد كل پروژه هم موثر بود. چون اين مساله بخشي از اصلاحات و دوباره‌كاري‌ها را هم حذف خواهد كرد.

پس بگذار تا همين جاي صحبت اين نتيجه را بگيرم كه توي كار ما (و احتمالا در اغلب شاخه‌هاي ديگر نرم‌افزار) علاوه بر ابعاد ساختار اطلاعاتي، مساله شيوه نمايش يا Navigation يا امكانات رابط كاربري كه در صفحات لازم داشتي جزو نكاتي هستند كه در مساله زمانبندي و تخمين زمان مهم محسوب مي‌شوند.

آگاه: يك مساله ديگري كه به نظرم مي‌رسد اينجا مي‌تواند براي حل اين مشكل كارساز باشد اين است كه خيلي از چيزهايي كه من براي سايتم درخواست مي‌كردم، به نظرم مي‌آيد كه امكاناتي نيستند كه فقط براي سايت من كاربرد داشته باشند و احتمالا مي‌توانند در خيلي از سايت‌هاي ديگر هم استفاده بشوند. براي همين هم كاري كه شايد در مورد پروژه من انجامش دو هفته به طول انجاميده شايد بار ديگر فقط سه روز طول بكشد. اگر شما بانك اطلاعات يا كتابخانه‌اي از اينجور اجزايي را كه در پروژه‌هاي مختلف توليد مي‌كنيد بوجود بياوريد تا دفعه بعد به راحتي و با سرعت مورد استفاده قرار بگيرند، مطمئنا به مقدار زيادي در سرعت انجام هر پروژه موثر خواهد بود.
البته تو قبلا برايم تعريف كرده بودي كه به نوعي داريد تلاش مي‌كنيد تا كاربردها و تعاريفي را به صورت استاندارد و Package در بياوريد تا از مزاياي آن در پروژه‌هاي مختلف استفاده كنيد. من فكر مي‌كنم هرچقدر براي اين موضوع وقت بگذاريد تا اين كتابخانه‌تان را تكميل كنيد ضرر نخواهيد كرد.

درسته. ما مدتي است كه حركت به سمت يك چنين وضعيتي را شروع كرده‌ايم. البته اغلب زورمان نمي‌رسد كه وقت مستقلي صرف اينكار كنيم و به نوعي آن سرمايه‌گذاري مورد اشاره تو را انجام دهيم. اما سعي مي‌كنيم اين كاربردها و ماجول‌هاي قابل "باز استفاده" را در حين كار از توي دل پروژه‌هايمان بيرون بكشيم، يك وضعيت عمومي‌تري بهش بدهيم و در جايي نگهداري‌اش كنيم به اميد اينكه در آينده مجددا مورد استفاده قرار بگيرد. اين مكانيزم باعث مي‌شود كه اين آجرهاي ساختماني ما از داخل تقاضاهاي فعلي بازار بيرون بيايد. يعني هر قدر بازار نيازها و تقاضاهاي جدي‌تري را مطرح كند مي‌توان ساختارهاي اوليه پيشرفته‌تري را از دل آن پروژه بيرون آورد و آماده كرد براي استفاده بعدي. شايد يكي از مشكلات در كار تو اين بوده كه پيش خودت فكر مي‌كردي خب اينها كه اينهمه مدت است مشغول اينكار هستند حتما قبل از اين يكبار فلان مكانيزم مورد نظر من را براي سايت ديگري اجرا كرده‌اند، پس از آن بلوك اوليه كه قبلا ساخته شده استفاده مي‌كنند و اين زمان زيادي را نخواهد گرفت. در صورتي كه اينطور نبوده. اين اصلا اولين بحث ما بود كه كاربردها و صورت مساله‌هاي فعلي‌اي كه ما در حال حاضر در آن حيطه مشغول كار هستيم آنقدر كاربردي و جدي و پيشرفته نيست. پس منطقي است كه از دل آنها هم بلوك‌هاي اوليه براي كارهاي جدي و پيشرفته بيرون نمي‌آيد. پروژه‌اي مانند پروژه تو بايد به تورمان بخورد، كه به قول خودت معتقد هستي هريك ثانيه فعال نبودن سايتت ضرر مستقيم مالي به كارت وارد مي‌كند، تا از درون آن بلوك‌هاي جدي ساخته شود و براي استفاده‌هاي بعدي هم كنار گذاشته شود.

آگاه: من اينجا مي‌خواهم به يك نكته ديگر هم كه به نظرم در كار شما خيلي نقش كليدي دارد اشاره كنم و آن نقش مديران پروژه‌هاست. البته مي‌دانم كه در همين اواخر در شركت يك تغييرات ساختاري داده‌ايد و به نوعي وظيفه اين نقش را با ساختار ديگري بين مسئوليت‌هاي ديگري پخش كرده‌ايد. با اين حال من فكر مي‌كنم كه پروژه‌هايي مشابه كارهايي كه شما انجام مي‌دهيد، اساسا يك نفر هماهنگ‌كننده لازم دارد. به نظرم كار سختي باشد كه مشتري را وادار كنيد براي بيان هر بخشي از نيازهايش به آن بخش مرتبط با آن نياز (گرافيك، فني، ...) مراجعه كند و مستقيما مشكلش را خودش حل كند. عدم آشنايي مشتري‌ها با مقولات فني وجود يك رابطي را لازم مي‌كند كه او بتواند با زبان مشتري با او طرف شود و بعد خواست‌ها و نيازهاي او را پس از پخته شدن به درون مجموعه منتقل نمايد. در يك چنين شكلي، اهميت و نقش اين مدير پروژه و رابط در كار شما بسيار حياتي است.
كسي كه اين مسئوليت را برعهده دارد، به دليل اشرافي كه بر كل جوانب مختلف پروژه دارد، با تصميم‌گيري درباره ترتيب انجام مراحل مختلف پروژه و تعيين تقدم و تاخر فعاليت‌هاي مختلف قادر است تا تاثير بسياري بر روي زمان پروژه، رواني انجام مراحل مختلف و استفاده بهينه از منابع داشته باشد.