این سری یادداشتها در راستای اشتراک دانش و تجربه در زمینه توسعه بازیهای موبایلی به رشته تحریر درآمدهاند. کوییز آو کینگز بیش از ۱۰ سال پیش توسط شش دانشجو دانشگاه امیرکبیر به نامهای امیرحسین ناطقی، فراز شمشیردار، محمدحسین حیدری، محمد سلیمانیفر (نگارنده این یادداشتها)، محمدعلی ساعتچی و وحید زاهدنژاد تاسیس شد و امروز با گذشت بیش از یک دهه، توسط تیمی جوانتر و مستعد با بیش از ۲۰ میلیون کاربر به مسیر خود ادامه میدهد.
بدیهی است که ذکر برخی از مثالها از مسیر توسعه، برای روشنتر شدن مفهوم کلی بیان میشود و لزوما ارتباط مستقیمی با مجموعه کوییز آو کینگز و یا شکل مدیریت آن ندارند. در واقع بیشتر از جنس تجاربی هستند که در این سالها و در سمت مدیریت فنی کوییز آو کینگز کسب کردم و امیدوارم انتقال آن به دیگر توسعهدهندگان، اندکی مفید باشد.
وقتی قصد راهاندازی یک استارتاپ یا محصول جدید را داریم، یکی از بزرگترین چالشها، انتخاب صحیح زیرساختها، زبانهای برنامهنویسی، فریمورکها و سایر تکنولوژیها است. این انتخابها باید طوری انجام شوند که نه تنها نیازهای کنونی پروژه را برآورده کنند؛ بلکه بتوانند به سرعت با رشد پروژه سازگار شوند و از پس حجم بالای درخواستها برآیند. تصمیمگیری صحیح در این زمینه میتواند تأثیرات زیادی در آینده محصول و موفقیت آن داشته باشد.
۱. استفاده از ابزارهای هوش مصنوعی:
امروزه میتوان بسیاری از کارها را به کمک ابزارهایی مثل Cursor AI, GitHub CoPilot و مشابه اینها به سرعت پیش برد. به عنوان مثال، میشود برای سرویسهای مختلف، تستهای مختلفی نوشت و بهاصطلاح Coverage بالایی داشت. در صورتی که قبل از ظهور اینگونه ابزارها، نوشتن کد با Test Coverage بالا، شاید نوعی وسواس به حساب میآمد (چون هم زمانبر بود و هم به توسعه رویهی تجاری محصول کمک چندانی نمی کرد)؛اما امروزه با کمک AI نه تنها سرعت توسعه خیلی بالاتر رفته، بلکه امکان نوشتن کد با کیفیت، نوشتن تست و همینطور انجام Integration Test نیز سادهتر شده است.
همه ی این موارد دست به دست هم میدهند که در مدت زمان کم، به یک کد با کیفیت دسترسی داشته باشیم. البته فراموش نکنید که هوش مصنوعی در این پروسه هرگز جایگزین نیروی انسانی نمیشود؛ بلکه بهعنوان یک ابزار در اختیار تیم قرار میگیرد و روند کار را تسریع میکند.
۲. توزیع نیروی انسانی متخصص در کشور

یکی از اولین فاکتورهای تاثیرگذار در انتخاب تکنولوژی، در نظر گرفتن نیروی انسانی متخصص در کشور یا منطقه است. این موضوع به خصوص وقتی که بخواهید تیم فنیتان را گسترش دهید اهمیت پیدا میکند. برای انتخاب یک زبان یا فریمورک، باید بدانید که چهقدر نیروی کار متخصص در آن حوزه در دسترس است و چه میزان دشوار خواهد بود تا نیروی مناسب پیدا کنید. به عنوان مثال، استفاده از زبانی مثل Scala نه تنها در ایران، بلکه در دنیا انتخاب درست یا حداقل سادهای نیست؛ زیرا تعداد متخصصین این ابزار بسیار کم است.
۳. سهولت کار با تکنولوژی و مستندات
در انتخاب تکنولوژی، علاوه بر کارایی، باید به میزان سهولت کار با آن توجه داشته باشید. یک تکنولوژی که مستندات خوبی داشته باشد و جامعه پشتیبانی فعالی داشته باشد، فرآیند آموزش و رفع مشکلات فنی را تسهیل میکند. این موضوع به ویژه زمانی اهمیت پیدا میکند که بخواهید نیروی جدیدی را استخدام یا در شرایط بحرانی نیاز به راهحلهای فنی پیدا کنید.
تکنولوژیهای «زنده» و پشتیبانیشده، بیشتر مورد توجه قرار میگیرند. به این معنی که باید از پروژههایی استفاده کنید که بهطور منظم بهروزرسانی میشوند و جامعهای فعال دارند. این به شما کمک میکند که هنگام مواجهه با مشکلات، راهحلها و پشتیبانی لازم را پیدا کنید و از بروز مشکلات طولانیمدت در آینده جلوگیری کنید.
۵. مقیاسپذیری (Scalability)
انتخاب تکنولوژیای که مقیاسپذیر باشد، بسیار مهم است. مخصوصاً وقتی که پیشبینی میکنید حجم ترافیک و درخواستها در آینده رشد میکند، باید تکنولوژی انتخابی بتواند به راحتی از پس بار زیاد برآید. این موضوع بهویژه برای استارتاپها که امکان رشد سریع دارند، حیاتی است و البته در بازیهایی که به وایرال شدن به واسطه کمپینها چشم دارند نیز مهم است.
۶. تحلیل Benchmark
زمانی که تصمیم به انتخاب تکنولوژی میگیرید، باید بنچمارکهای آن را بررسی کنید و اطمینان حاصل کنید که میتواند نیازهای عملکردی شما را به خوبی برآورده کند. برای مثال، در یک بازی آنلاین، زمان تاخیر (Latency) میتواند تأثیر زیادی بر تجربه کاربر داشته باشد، در حالی که برای یک سایت فروشگاهی ممکن است این تأثیر به اندازهای نباشد که نیاز به بهینهسازیهای پیچیده داشته باشد. موردی که قطعا در مدیریت هزینههای پروژه کارآمد خواهد بود.
۷. قابلیت بازیابی از بحران (Disaster Recovery)
برای هر سیستم، باید برنامهای برای مدیریت بحران و بازیابی دادهها در نظر گرفته شود. انتخاب زیرساختهایی که امکان Replication را فراهم و از وقوع اختلالات بزرگ جلوگیری کنند، بسیار مهم است. این موضوع به شما کمک میکند که در صورت بروز مشکلات غیرمنتظره، سیستم خود را بدون از دست دادن دادهها و خدمات بازگردانید.
۸. استفاده از Boilerplate یا معماریهای پیشنهادی
فراموش نکنید که همواره تبادل نظر با جامعه فنی میتواند شما را بهروز نگه دارد. به همین خاطر پیشنهاد میکنم علاوه بر Reddit همواره به Github هم نیمنگاهی داشته باشید.
شخصا مدتی است تصمیم گرفتم که برخی معماریها، Boilerplatedها که در لود بالا تست شدهاند و از آنها بهره بردم را بازنشر کنم. اگر علاقهمند بودید، میتوانید چندین مورد کاربردی را در گیتهاب ببینید. پروژههایی در دسترس عموم که خود شما هم میتوانید به بهتر شدن آن کمک یا بهاصطلاح Contribute کنید.
یکی از این پروژه های مفید، پروژه مچینگ گروهی است. من این معماری را با مدتها تست کردن روی بخش مچینگ بازی گروهی و انفرادی کوییز آو کینگز نوشتم. البته که این کد، کد کوییز نیست؛ اما از معماری و چهارچوبهای مشابه پیروی میکند. منظور از معماری، نحوهی نوشتن مچینگ به صورت یک ماژول با عملکرد ناهمگام (Async) بوده است. ضمنا از Boilerplate پروژههای Rovio (سازندگان Angry Birds) هم کمک گرفتم، بنابراین نگاه به این پروژهها هم خالی از لطف نیست.
در نهایت، انتخاب صحیح تکنولوژیها و زیرساختها از همان ابتدا میتواند پایهگذار موفقیتهای بلندمدت محصول شما باشد. توجه به فاکتورهایی مانند مقیاسپذیری، پشتیبانی فنی و هزینههای منطقی در طول زمان، به شما کمک میکند تا به طور پایدار رشد کنید و از مشکلات پیشبینینشده جلوگیری کنید.
source