در کتاب "ایران، جامعه کوتاه مدت"، همایون کاتوزیان به بررسی علل ناتوانی ایران در توسعه پایدار پرداخته است. این نظریه که ریشه در تاریخ و فرهنگ ایران دارد، تأثیرات گستردهای در بسیاری از ابعاد زندگی اجتماعی، اقتصادی و سیاسی کشور داشته است.
در این مقاله، قصد داریم به بررسی چگونگی انعکاس این نظریه در حوزه مهندسی نرمافزار و ساخت محصولات تکنولوژی محور در ایران بپردازیم. با توجه به ویژگیهای کوتاهمدت بودن در جامعه ایران که کاتوزیان به آن اشاره کرده است، تلاش خواهیم کرد تا نشان دهیم چگونه این ویژگیها بر فرآیند توسعه و ساخت محصولات نرمافزاری در ایران تأثیر گذاشته است.
از موضوعات مورد بررسی در این مقاله میتوان به مهاجرت نخبگان، تغییرات سریع قوانین، بیثباتی ناشی از خدمت سربازی، نبود پلکان ترقی شغلی، ایجاد بدهی فنی و کدهای ناپایدار، رقابت و کشمکش درونسازمانی و همچنین نبود نیروهای متخصص و باتجربه اشاره کرد. هدف این مقاله آن است که با تبیین این مسائل در حوزه مهندسی نرمافزار، درک بهتری از چالشهای توسعه محصولات تکنولوژی محور در ایران ارائه دهد.
سالیان درازی هست که این قواعد نه در بستر سیاسی بلکه در بستر مهندسی و ساخت محصول نرم افزاری سایه افکنده است. بر این باور هستم که موارد تطبیقی مشاهدات خودم را با این نظریه بیان کنم:
نخست بر این باور هستم که با توجه به شرایط اجتماعی، اقتصادی و سیاسی دانشگاه و مسیر دانش صرفا محلی برای گذر و رفتن به کشور های اروپا و آمریکا شده است. به طوری که افراد از کودکی تا جوانی تماما در تلاش اند که به موفقیت های علمی برسند تا بتوانند مهاجرت کنند و به کشور های دیگری بروند. که این امر با "ناپایداری موقعیتهای اجتماعی و اقتصادی" کتاب تطابق دارد.
برخلاف جوامع اروپایی و آمریکا، قوانین با سرعت بسیار زیادی در حال تغییر هستند ولی برای اساس قوانین بیزنس ها مجبور به تطابق سریع تر با قواعد هستند که نیازمند پیاده سازی مجدد یا اصلاح رویه های موجود شوند. در دراز مدت این امر باعث می شود کد ها از حالت پایداری خارج شوند و به صورت باگ استیت در بیایند. همچنین بیزینس گاها به قدری پیچیده می شوند که کمتر کسی از روند کلی سیستم مطلع می گردد. همچینین فرایند آنبورگ کاربران بسیار پیچیده تر خواهد شد.
یکی از معضلات پیچیده جوانان ایرانی مبحث سربازی هست. نه تنها خود فرد بلکه شرکت ها هم نیروی های کلیدی خود را از دست می دهند و عملا باعث میشوند که نتوانند روی افراد جوان اتکا کنند چون ممکن هست که در دسترس نباشند و بی ثباتی را به شرکت ها بیش از پیش ارایه می کند.
یک موضوع بسیار آزار دهنده در اکو سیستم ایران نبود پلکان ترقی برای افراد هست. یعنی نیرو های کلیدی شرکت راحت تر می توانند پوزیشن کاری از شرکت های دیگر دریافت کنند تا در همان شرکت پوزیشن بالاتری پیدا کنند. ساده تر بیان کنیم اغلب شرکت بر این مبنی حرکت می کنند که حقوق کارمندان خود را افزایش ندهند و تا جایی که امکان دارد آنها را در موقعیت فعلی حفظ کنند، در نهایت این امر باعث خروج دائمی کارمندان و عدم ثبات در سیستم شود.
هر چند در تمام دنیا مبحثی به اسم MVP یا حداقل نیازمندی برای اجرای محصول داریم. و ایجاد بدهی فنی در همه جا دنیا مبحثی رایج هست که بیزینس بنا به نیاز خود بر سیستم تحمیل می کند ولی باید در نظر داشته باشید هر چقدر بدهی فنی بیشتر شود احتمال ایجاد کد های legacy بیشتر خواهد شد و در آینده زمان بیشتری باید صرف اصلاح سیستم گردد. غالبا اینگونه است که سیستم نیازمند پیاده سازی در زمان کوتاهی هست که غالبا کد ها نیاز به ریفکتور دارند. همچنین تغییر بسیار زیاد بیزینس هم مزید بر علت خواهد بود تا کد ها به شکل ناپایدار دربیایند و در نهایت به صورت legacy در سیستم باقی بمانند.
تلاش برای اثبات خود فرد و کشمکش بسیار برای اثبات خوب نبود دیگران هم یک آفت دائمی در ایجاد کشمکش و نابود کردن کد ها در یک شرکت مشاهده می شود به طوری که در اکثر موارد وجود یک استاندار که همگی بر آن اتفاق نظر داشته باشند و بر اساس آن پیش بروند بسیار نادر هست. غالبا برای اثبات اینکه دیگری خوب نیست، کد هایشان را کامل از نو می نویسند و اجازه توسعه را از هم می گیرند تا مبادا دیگری جایگزین آنها شوند. همانطور که در کتاب به موضوع "ترس دائمی حاکمان از کودتا و شورش" توسعه دهندگان بالا دست دائما این ترس را دارند زیردستشان آنها رو کنار بگذارند و جای آنها را بگیرند، حال اینکه این کشمکش دائمی باعث خروج نیرو متخصص از شرکت خواهد شد.
خروج دائمی نیرو های متخصص به علت های اجتماعی، سیاسی و اقتصادی و همچنین کشمکش زیاد در داخل شرکت ها سرانجام باعث می گردد که به محض دریافت آفرهای چند برابری، نیروهای متخصص از شرکت خروج کنند و در بسیاری از موارد باعث خروج آنها از کشور می شود. نبود نیرو متخصص باعث می شود که به خیلی از مسائل از نظر فنی و بیزینسی به صورت جامع نگاه نشود و مشکلاتی اساسی در ساختار در آینده برای سیستم و شرکت ایجاد کند.
درست یا غلط، در جامعه ای زندگی می کنیم که کوتاه مدت هست باید در نخستین گام پذیرفت که ایران، بر خلاف ملل دیگر جامعه ای کوتاه مدت هست و باید با توجه به شرایط موجود در آن راه حل ارایه داد.
یک اصطلاح بسیار رایج وجود دارد تحت این عنوان که فرد، آچار فرانسه هست و همه مسئولیت ها از قبیل فرانت، بک، دواپس و ماشین لرنینگ و صحبت با مشتری را بر عهده دارد. اگر چنین فردی در سازمان دارید باید وظایف آن را بشکنید و او را از پوزیشن عملیاتی به پوزیشن مدیریتی تغییر دهید. این کار از فشار بیش از حد کاری و فکری از فرد جلوگیری می کند، همچنین با ارتقا فرد مانع از خروج اون از سیستم می شوید.
به جای کشمکش دائم بین افراد کلیدی سازمان، وظایف آنها را از هم جدا کنید. فرهنگ سازمانی "من خوبم، تو خوبی" نیاز به کار قوی تیم HR دارد که به افراد کلیدی ارزشمندی بدهند و مانع از درگیری بین تیمی بشوند.
ضرب المثلی داریم که متناسب با فرهنگ ایرانی هست. اگر می خواهید یک کار قوی ارایه بدهید از خرده سنگ ها شروع کنید. در جامعه ای که افراد دائما در حال تغییر هستند ساخت یک سیستم یک پارچه مرکزی عملا امکان پذیر نیست، پس بیشتر روی ساخت سیستم های کوچک غیر متمرکز و سپس اتصال آنها به هم تمرکز کنید.
یکی از بزرگترین مشکلات مهندسی نرم افزار در ایران نبود فرهنگ سازمانی برای مستند سازی هست. غالبا شرکت ها به دو دسته بزرگ کاغذ بازی زیاد و بدون مستندات تقسیم می شوند. نظر بر این است که هر دو رویه غلط هست. مستند سازی باید به فراخور نیاز و در حد درک سریع بیزینس به دور از پیچیدگی و روند طولانی باشد. نداشتن داکیومنت هم سبب می شود که افراد نتوانند ادامه کار دیگران را پیش ببرند و عملا آنبوردینگ بسیار زمان بر خواهد بود. منظور مستندسازی نوشتن متون طولانی فارسی و یا توضیح بدیهات نیست. استفاده از swagger , clean code معماری های مشخص، داشتن گیت برای تمام اجزای پروژه و داشتن داکر برای اجرای هر پروژه و همچنین readme.md صحیح جز مهمی از مستند سازی هستند که باید رعایت شوند. در نظر داشته باشید که برخی از مستندسازی ها مانند داکیومنت های بانک ها و روند اداری که دارند در نقطه مقابل قرار دارند و تا حدی زیادی ناکارآمد محسوب می شوند.
تست نویسی یکی مباحث پر چالش محسوب می شود. از طرفی نوشتن تست برای کاور کردن کل کد ها کاری بسیار سخت و ناکارآمد خواهد بود، از طرفی شرکت ها زمان مناسب برای تست نویسی برای کد ها در نظر نمی گیرد. تیم تست هم غالبا به انجام تست دستی مشغول هستند و خبری از اتومات تست دیده نمی شود. توصیه بر این است که برای لایه سرویس تست نوشته شود و فقط زمانی تست نوشته شود که منطق خاصی در لایه بیزینس داریم که حتما باید تست شود تا اجرا شود. افراط و تفریط در زمینه تست نویسی بسیار آسیب زا هست و باید از آن اجتناب شود.
شرکت ها باید این را بپذیرند که نیرو ها دائما در حال خروج هستند و راه حلی جز تداوم در استخدام نیرو ها نیست. این روند نیاز هست که به صورت دائمی در نظر گرفته شود.
وقتی دولوپر ها دائما در حال رفت و آمد هستند، یکی از وظایف مهم CTO نگارش استاندار کلی با اجازه آزادی عمل به دولپر ها هست که تمام کد ها طبق یک استاندارد کلی پیش بروند، حال اینکه دولوپر آزادی ها لازم برای انتخاب تکنولوژی و کدنویسی استاندارد را داشته باشند.
یکی از مزایای استفاده از معماری ماکروسرویس جدا کردن حوزه اختیاری هر فرد می باشد. به طوری که یک فرد بدون اینکه نیاز باشد به کل سیستم دسترسی پیدا کند می تواند فقط بخش های خود را مدیریت کند و با بقیه تیم ها در تبادل دیتا باشد. در اینجا هم جدا کردن سرویس به ما این امکان را می دهند که در صورت نیاز سرویس ها را به سهولت از بقیه جدا کنیم و هر زمان که لازم باشد فقط همان سرویس را تغییر و یا تعویض کنیم.
مقاله با تکیه بر نظریه "جامعه کوتاهمدت" همایون کاتوزیان، به بررسی چالشهای صنعت نرمافزار در ایران میپردازد و نشان میدهد چگونه ویژگیهای جامعه کوتاهمدت در این حوزه نمود پیدا کرده است. چالشهای اصلی شناسایی شده شامل مهاجرت مداوم نیروهای متخصص، تغییرات سریع قوانین و تأثیر آن بر کدنویسی، بیثباتی ناشی از خدمت سربازی، نبود مسیر رشد شغلی، فشار زمانی برای پیادهسازی سریع و رقابتهای ناسالم درونسازمانی است. در مقابل این چالشها، راهکارهایی عملی مانند پرهیز از تجمیع مسئولیتها در یک فرد، ایجاد فرهنگ سازمانی مبتنی بر همکاری، طراحی سیستمهای کوچک و مستقل، توجه به مستندسازی اصولی، رویکرد متعادل به تستنویسی و تدوین استانداردهای کدنویسی منعطف پیشنهاد شده است. نتیجهگیری اصلی مقاله این است که موفقیت در توسعه نرمافزار در ایران، نه در تلاش برای اجرای الگوهای جوامع بلندمدت، بلکه در پذیرش واقعیت کوتاهمدت بودن جامعه و تطبیق روشهای مدیریتی و فنی با این واقعیت نهفته است.