مجتبی پاکزاد
مجتبی پاکزاد
خواندن ۳ دقیقه·۱ سال پیش

مسیر ۱۰ ماهه توسعه پروژه

وقتی سال گذشته به تیم Levannei پیوستم، با پروژه ای روبرو شدم که از لاراول و ووکامرس به عنوان هسته استفاده می‌کرد.

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

پروژه مستقیماً روی کنترل پنل cPanel و سیستم عامل CentOS بود، ما سیستم عامل را به اوبونتو تغییر دادیم. پروژه‌ها (لاراول و وردپرس) را داکرایز کردم و لاراول را از نسخه 5.7 به 10 ارتقا دادم و دیگر نیازی به cPanel نداشتیم.

با توجه به جامعه هدف بزرگ ما، وردپرس گزینه مناسبی برای میزبانی پروژه نبود و حذف وردپرس کار آسانی نبود.

با توجه به ددلاین مناسب و توانایی تیم فنی پروژه و تایید مدیرعامل، فروشگاه (که تقریباً تمام امکانات ارائه شده توسط ووکامرس و حتی بیشتر را شامل می‌شد و خودم قبلاً آن را توسعه داده بودم) جایگزین وردپرس شد و دو دیتابیس نیز با هم ادغام شدند.

برای همه تیبل‌ها مایگریشن نوشتیم و بهینه سازی دیتابیس را شروع کردیم، بنابراین حدود ۲۰۰ تیبل دیتابیس به ۱۳۰ تیبل کاهش یافت و حجم پروژه از حدود ۲ گیگابایت به ۳۰۰ مگابایت کاهش یافت، اما همچنان مشکلات وجود داشت، مثلاً ما 6 پنل داریم. شامل دو پنل مدیریت، دو پنل کاربری، پنل کارمند و پنل شرکتی برای آژانس طراحی!

پس از بررسی دقیق، متوجه شدم که پروژه اصلی توسعه یافته توسط شرکت طراح دارای مشکلاتی مانند عدم رعایت استانداردها بوده است، مثلا تمام HTTP Verbهای پروژه یا get یا post هستند. باگ‌های مختلفی که در سیستم وجود داشت و از همه بدتر یک کاربر مخفی (با استفاده از scope) وجود داشت که در کوئری‌ها نمایش داده نمی‌شد و از طریق پنل ویژه آژانس طراحی به اطلاعات کامل وب سایت دسترسی پیدا می‌کرد.

ما پروژه فروشگاه را در پروژه لاراول آژانس طراحی ادغام کرده بودیم، اما تقریباً بخش بزرگی از ویژگی‌های ارائه شده توسط پروژه قبلی، از قبل در پروژه فروشگاه وجود داشتند و قسمت کوچکی باید منتقل می‌شد. بنابراین در فاز بعدی پروژه لاراول را که مشکلات زیادی داشت را در یک ریپازیتوری دیگر ادغام کردیم و تمامی ویژگی‌های آن را به پروژه جدیدمان منتقل کردیم. پروژه سبک‌تر و تیبل‌ها بهینه‌تر شدند.

کل تیم فنی از اوبونتو به عنوان سیستم عامل استفاده می‌کردند. ما ۳ استیج dev و sit و prod را تعریف کردیم و CI/CD را راه اندازی کردیم.

بدهی‌های فنی زیادی بود که باید رفع می‌شد، مثلاً پروژه خیلی بزرگ بود و داکیومنت نداشتیم و گاهی تغییر یک قسمت روی قسمت دیگر تأثیر می‌گذاشت. بنابراین یک نفر به عنوان مسئول حل بدهی فنی انتخاب شد، اولین مسئولیت او تهیه داکیومنت برای دیتابیس، فرآیندها و ... بود.

در همان زمان برای کل پروژه یونیت تست نوشت و ددلاین ۱ ماهه برای اینکار گذاشتم، بعد از نوشتن چندین نمونه یونیت تست برای وی و آموزش دادن، آن نمونه تست‌ها به وی کمک کرد تا بتواند تست نویسی را آغاز کند و ما به آنچه که قبل از آن در نظر داشتیم رسیدیم. اکثر اشکالات سیستم را با نوشتن تست یافته و رفع کردیم. همچنین در حال حاضر بیش از ۱۰۰ صفحه مدارک فنی داریم.

اکنون همه توسعه دهندگان باید تست بنویسند و نوشتن فیچر تست‌های نیز شروع شده است و ما PhpDoc را تقریبا برای همه متدها نوشتیم. در حال حاضر، ما به TDD سوئیچ کرده‌ایم.

حالا نوبت تغییر دیتابیس به PostgreSQL بود، همزمان دو پروژه پنل مدیریت و فروشگاه را با Next.js شروع کردیم. بنابراین ما مجبور شدیم معماری را تغییر دهیم و یک معماری جدید طراحی کردیم که از چندین لایه مختلف برای رسیدگی به ریکوئست‌های مربوط به تقسیم وظایف استفاده می‌کرد که ایده آن تا حدی از معماری پورتو الهام گرفته شده است. در پستی دیگر در مورد آن بیشتر خواهم نوشت.

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