تفاوت ما و آنها

قسمت چهاردهم – 1400/9/29امروز تقریباً سه ماه از کار با شرکت جدید می گذرد. بر اساس صحبت‌هایی که با دوستان مختلف داشته‌ام می‌توانم یک سری تفاوت را بین کار خودمان و آن‌ها و بین شرکت های خودمان و آن‌ها از دیدگاه فنی و غیر فنی لیست کنم.منظر فنیما تئوری بازی زیاد داریم: design pattern در مقیاس وسیع، Domain Driven، انواع messaging در معماری میکرو سرویس، transaction و query های مختلف در دیتابیس، کانبان، کایزن و ده چیز دهن پر کن دیگر. اما آن‌ها با اینکه از خیلی از مفاهیم استفاده می‌کنند اما اینقدر هم رویشان تکیه نمی کنند. برنامه نویس ها بیخود و بی جهت زیر انبوهی از این اصطلاحات و روش‌ها مدفون نمی شوند. ما در ایران اینقدر درگیر این تئوری‌ها هستیم که وقتی می‌خواهیم حتی یک کار ساده در حد اضافه کردن یک فیلد به فلان بخش انجام بدهیم مجبور می‌شویم دل و روده کل سیستم را به خاطر آن یک کار بیرون بریزیم. اما خوب در شرکت های آن‌ها قرار نیست همه چیز را همه‌کس بدانند، مسلط باشند، صبح تا شب راجع بهشان حرف بزنند و در نهایت هم کاری از پیش نبرند.مسیر آن‌ها و برنامه کاری آن‌ها مشخص است و کمتر تغییر می‌کند ولی مال ما نه. اول اسپرینت با دو جدول و 20 فیلد شروع می‌کنیم ولی تا آخر اسپرینت دو بار دیگر هم عوضش می کنیم. توجیه مان هم این است که تغییر در ذات نرم‌افزار است. آن‌ها یک version تعریف کرده و داخل آن یک سری feature در نظر می گیرند. این feature ها را از قبل به خوبی صیقل کاری کرده و تأیید مشتری و مدیر محصول را دریافت کرده اند. بعد شروع می‌کنند به پیاده سازی.آن‌ها خیلی خوب unit test و component test دارند ولی ما نه. این شاید بزرگترین تفاوت عملی بین ما و آن‌ها باشد. آن‌ها خیلی زیاد automated test در انواع مختلف می نویسند. به pass شدن آن‌ها هم حساس هستند. اما ما تقریباً تست نمی نویسیم.از همه این‌ها که بگذریم، تفاوت کدی که ما می نویسیم با آن‌ها خیلی زیاد نیست. روش دسترسی به دیتابیس یا پیاده‌سازی businness logic ما با آن‌ها خیلی متفاوت نیست. اصلاً کدها را که کنار هم می‌گذاریم به این راحتی معلوم نمی‌شود کدامش مال ماست و کدامش مال آنها.منظر غیر فنیپلتفرم توسعه نرم‌افزار ما با آن‌ها یکی است. ما دات نت داریم، آن‌ها هم همینطور. IDE و دیتابیس هم یکی است، روش نوشتن کد هم یکی است. حتی متودولوژی توسعه نرم‌افزار هم یکی است. ما اسکرام داریم آن‌ها هم اسکرام. جزییات استفاده از اسکرام هم یکسان است. جلسات palnning و retro و daily و غیره یکی است. شاید از معدود تفاوت‌هایی که داریم یکی استفاده بیشتر و جدی‌تر آن‌ها از test است و دیگری استفاده آن‌ها از سرویس های ابری مثل amzon است. که حداقل این مورد دوم تفاوت حادی نیست. اما در چند چیز متفاوت هستیم.نرم‌افزار در سیستم اقتصادی آن‌ها با‌ارزش تر از ماست. مثال می زنم. نرم افزاری که تقریباً توسعه اش کامل شده و وارد فاز maintenance شده باز هم نیاز به تغییرات دارد. این تغییرات توسط مشتری در قالب درخواست تغییر یا به قول آن‌ها Change Request بیان می شود. ما در ایران بابت یک CR دو هفته‌ای تقریباً پول دو ماه حقوق یک developer را از مشتری می‌گیریم اما در آنجا نزدیک به چهار ماه. یعنی همین‌جوری سر انگشتی هم که حساب کنیم نرم‌افزار در آنجا اقلاً دو برابر با‌ارزش تر از ایران است. نتیجه این موضوع هم این می‌شود که آن‌ها می‌توانند منابع بیشتری برای انجام CR اختصاص دهند. در نتیجه هم کیفیت کار بالاتر می‌رود و هم استرس تیم کاهش می یابد.قدرت پول یک تفاوت جالب دیگر است. در ایران، پول دست هر کس که باشد قدرت هم دست اوست. سفارش دهنده های نرم‌افزار در ایران (خصوصا دولتی ها) خدایی می کنند. چون پول دست آنهاست هر جور که دلشان می‌خواهند قرارداد را می نویسند. و هر وقت که دلشان بخواهد پول را پرداخت می کنند. از طرفی مجری هم با کارمند خودش چنین رفتاری دارد. چون حقوق پرداخت می‌کند هر طور که دلش می‌خواهد با کارمندش رفتار می کند. حقوق را با تأخیر می دهد، بیمه را حداقل رد می کند، سفته می‌گیرد و همین‌طور الی آخر. اما آن طور که تا امروز فهمیده ام این مدل زروگویی و قلدری در اینجا کمتر رایج است. هم زور مشتری کمتر است و هم شرکت زورگویی کمتری نسبت به کارمندانش دارد.با آن که روش تولید نرم‌افزار ما با آن‌ها یکی است (تقریبا) و سرعت توسعه نرم‌افزار در ایران اگر بیشتر از آنجا نباشد، کمتر از آنجا هم نیست. اما یک تفاوت ریز وجود دارد. خیلی از نرم‌افزارها در ایران هیچ وقت زیر بار نمی روند. در خیلی از نرم‌افزارها هم که زیر بار می روند، باز هم بخش قابل توجهی از ویژگی‌ها مورد استفاده قرار نمی گیرند. حتی بخش قابل توجهی از نرم افزارهایی که زیر بار می‌روند و همه ویژگی هایشان مورد استفاده قرار می‌گیرند هم عمر طولانی ندارند. یعنی مثلاً دو سال یا سه سال استفاده می‌شوند و بعد کنار گذاشته می شوند.دلیل؟ از همان اول نیازی به آن نرم‌افزار نبوده یا اینکه نیازسنجی درست انجام نشده. مشتری یا دید کافی از نیازمندی هایش نداشته یا شخص و تیم نامناسبی برای طراحی محصول در نظر گرفته. گاهی اوقات رانت های مختلف یا عوض شدن‌های پی در پی باندهای سیاسی باعث شدت وقوع این حوادث می شوند. گاهی اوقات نیازهای بازار به خوبی تحلیل نمی شود و گاهی اوقات هم موازی کار اتفاق می‌افتد یا اینکه تحقیقات در بازار ناقص بوده یا اصلاً انجام نشده.همه این‌ها در حالی است که حس می‌کنم در سیستم اقتصادی آنها، دوباره کاری کمتری اتفاق می افتد. اگر نیاز به یکی چیزی دارند برایش وقت و انرژی می گذارند و نصفه رهایش نمی کنند. نیازمندهای را بهتر از ما تحلیل می‌کنند و کار را جدی می گیرند. نتیجه اینکه پول و وقتی که برای تولید نرم‌افزار می‌گذارند کمتر هدر می رود.میانگین حضور کارمندان در این شرکت 5 سال است. در حالی که میانگین حضور برنامه نویس ها در شرکت های ایرانی گاهی اوقات به دو سال و حتی یک سال هم نمی رسد. جابجایی نیرو در ایران خیلی زیاد است. برای خیلی‌ها عادی است که هر سال به جای جدیدی بروند. برای شرکت ها هم عادی شده که هر سال بلکه هر چند ماه جابجایی نیرو داشته باشند. علی الظاهر ثبات کار خود شرکت ها هم در ایران و آنجا تفاوت زیادی با هم دارد. ما در ایران شرکت هایی (حوزه IT) داریم که بیش از ده سال عمر نمی کنند. در حالی که به نظر می‌رسد میانگین عمر شرکت ها در آنجا خیلی بیشتر از ایران باشد. شما خودتان تصور کنید این ثباتی که آنجا هست چقدر هم به نفع شرکت است و هم به نفع کارمندهایش.ضعف، حقارت و فساد بخش خصوصی در ایران در مقابل بزرگی، قدرت و توان حمایت گر بخش خصوصی آنجا تفاوت بعدی است. کارمند بخش خصوصی در ایران (حداقل شرکت های کوچک که این‌طور هستند) جدی گرفته نمی شود. عموم جامعه آن را یک شغل دست دوم می دانند، بانک ها در ارزیابی هایشان روی کارمند بخش خصوصی حساب باز نمی کنند. نه به این راحتی دسته چک می‌دهند نه ضمانت او را قبول می کنند. بیمه ها خیلی سخت به بخش خصوصی بیمه تکمیلی می‌دهند و همین‌طور الی آخر. از طرف دیگر مقدار قابل توجهی از بخش خصوصی در ایران بر اساس رانت و انحصار ساخته شده. در کنار این‌ها، ماهیت سلطه گر بخش خصوصی در ایران غیر قابل انکار است. بخش خصوصی در حالی که انتظار کار خوب دارد و از این کار خوب بهره می برد، اما از کارمندش ضامن و معرف و چک و سفته هم که می‌خواهد هیچ، بعضی وقت‌ها هم بیمه اش را رد نمی‌کند یا به بهانه‌های مختلف به صورت حداقل رد می کند. از طرفی خود همین بخش خصوصی هم در برابر دولت ضعیف و ناتوان است. دولت با تغییر مداوم قوانین و رقابت ناسالم هر کاری که دلش بخواهد با بخش خصوصی می کند. اما آیا بخش خصوصی در اروپای غربی یا آمریکای شمالی هم همین‌طور است؟در مدت این سه ماه یک چیز برایم هنوز عادی نشده. اینکه چطور این شرکت به کارمندهایش اینقدر اعتماد دارد. ما مدام جلساتی داریم که پیشرفت پروژه های بازاریابی در آن به همه گفته می شود. در همین جلسات میزان سود و زیان شرکت و پیش‌بینی از وضعیت مالی به همه گفته می شود. اینکه قرار است در آینده چه پروژه ای را به چه قیمتی برنده شویم مدام به همه گفته می شود. وضعیت استخدام و موقعیت های خالی از جمله همین اطلاع رسانی های مداوم است.بخش دیگری از اعتماد در بخش فنی دیده می شود. من از همان روز اول به همه git repo ها دسترسی داشتم. از همان روز اول معماری پروژه و ساختار API را یاد گرفتم. آن هم بدون آنکه از قبل چک و سفته داده باشم. این را مقایسه می‌کنم با شرکت های داخلی که هر روز باید در حال درخواست دادن برای دسترسی به بخش‌های مختلف پروژه باشیم.پی نوشت: این آخرین قسمت از این سری مطالب بود. از اینجا به بعد باز هم از کار جدیدم می‌نویسم، ولی نه عنوان بخشی از این سری مطالب، بلکه به عنوان مطلبی جالب در کنار دیگر مطالب بلاگ.