آرش کدخدائی

تصمیم‌های سخت

۱ اردیبهشت ۱۳۹۸ - نگرشکار

سال گذشته ده‌ها تصمیم ریز و درشت فنی توی کار گرفتم. تصمیماتی که یه زیربنا رو برای پروژه تشکیل داده. این نوع از تصمیماتی که می‌خوام ازشون حرف بزنم از جنس تصمیم در انتخاب ابزارها و مسیر خود پروژه به عنوان یه قطعه کده؛ فارغ از تصمیماتی از جنس نوع برخوردم با هم‌تیمی‌ها، نوع و کیفیت کار خودم، موندن یا رفتنم و …

شاید حیاتی‌ترین تصمیمی که گرفتم مربوط به انتخاب TypeScript (تایپ‌سکریپت) بود. یادمه مرداد ماه بود و با اتوبوس داشتیم می‌رفتیم تهران که توی اتوبوس ناگهان تصمیم گرفتم از روزی که برگردم اصفهان پروژه رو ببرم روی تایپ‌سکریپت. یه پروژه با بالای ۶۰ هزار خط کد. البته تصمیمم بی‌فکر نبود؛ مدت‌ها به مزایا و عواقبش فکر کرده بودم ولی عملی کردنش ناگهانی بود. بدون مشورت و اجازه این کار رو کردم و به سپهر هم گفتم باید تایپ‌سکریپت کد بزنه. یادمه چقدر پروسه‌ی سختی بود. نتیجه چی شد؟ عالی بود. بعد از چند ماه همه راضی بودند. هنوز مقاومت‌ها رو به یاد دارم. هنوز وقت کم آوردن برای ددلاین رو به یاد دارم چون مجبور بودم تمام تایپ‌های پروژه رو بنویسم. هنوز مستندات کافی پیدا نکردن‌ها رو به یاد دارم. حتی یادمه تایپ خود ری‌اکت هم آپدیت نبود ولی وقت و حوصله‌ی کافی برای کانتریبیوت رو نداشتم. یادمه.

تایپ‌سکریپت اولین تصمیم نسبتاً مهم نبود. فکر کنم اولیش کنار گذاشتن css modules و استفاده از یه لایبرری css in js بود. یادمه که به لایبرری emotion رسیدم که هیچ کسی از اطرافیانم نمی‌شناختش. تصمیم گرفتم ازش استفاده کنم و یک هفته‌ای کامپوننت‌هام رو با اون نوشتم. ولی اونقدر کامیونیتیش کوچک بود که یه روز کلافه شدم و در آنی styled-component رو جایگزین کردم. فقط به دلیل مستندات و کامیونیتی بزرگ‌تر چنین تصمیمی گرفتم. یادمه به این فکر کردم که این پروژه، پروژه‌ی تفریحی من نیست و نباید سر آینده‌اش ریسک کنم. اگه فردا من رفتم و جایگزین شدم باید نفر بعد سریع بتونه با پروژه هماهنگ بشه.

انتخاب بعدیم رو به یاد دارم که قرار بود یه لایبرری برای فرم‌ها توی ری‌اکت رو انتخاب می‌کردم. به یاد دارم که احمد، سپهر و بعضی سلبریتی‌ها استفاده از react-final-form رو پیشنهاد می‌کردند. وقتی مستنداتش رو خوندم متوجه شدم که با فلسفه‌ی ری‌اکت سازگار نیست. هرچقدر محبوب بشه نمی‌خوامش. یادمه که formik رو فقط به خاطر فلسفه‌ش انتخاب کردم.

و آخرین انتخاب مهمم انتخاب یه روتر جدید برای پروژه بود. آپگرید کردن react-router نسخه‌ی سه به چهار یا استفاده از reach-router؟ پروژه‌ی ما بسیار بزرگ شده بود و بخش روتر با ساختار بد و اشتباهی توسعه داده شده بود. کار آپگرید زمان‌گیر و سخت بود. من تصمیم اشتباه رو گرفتم. توی یه تصمیم بچه‌گانه و هیجانی reach-router رو انتخاب کردم. البته این لایبرری مزایایی داشت ولی نه اونقدر که آینده‌ی پروژه رو به خطر بندازم. کامیونیتی کوچک و ناشناخته بودن می‌تونه باعث بشه که این لایبرری بعد مدتی توسعه داده نشه! البته امروز وضعیت بهتری داره ولی تصمیم من اشتباه بود حتی اگه کسی متوجه نشده باشه.

برخلاف پروژه‌های کوچک یا فریلنسری، پروژه‌هایی با توسعه‌ی مداوم که ممکنه چندین سال توسعه داده بشوند بسیار حساس هستند و یه تصمیم اشتباه می‌تونه هزینه‌های زیادی رو به تیم وارد کنه. و من امروز با ترکیبی از تصمیم‌های سیاه، سفید و خاکستری تجربه‌ای رو دارم که برای خودم بسیار باارزشه. پشت هر کدومشون ساعت‌ها تحقیق و فکر بوده که بعضی خروجی مثبتی داشته و برخی منفی. هزینه‌ی تجربه‌ی من رو شرکت داده ولی می‌دونم که برآیند تصمیماتم برای شرکت با اختلاف مثبت بوده.

طراحی با ♥ توسط آرش کدخدائی الیادرانی (@slasharash)