کار در کیاسکد

چند ماهی هست که از آخرین نوشته‌ام توی وبلاگ فارسیم می‌گذره و متاسفانه هم وقت نبود مطلب جدیدی بنویسم و هم چیز خاصی برای گفتن نداشتم. تصمیم گرفتم در مورد چیزهایی که بعد از ۹ ماه کار در کیاسکد اتفاق افتاده بنویسم تا هم شما با شرایط کار در این شرکت (و تا حدودی خیلی از شرکت‌های بیرون ایران) آشنا بشید و هم کاری کرده باشم که وبلاگ دوباره فعال بشه. این مدت خیلی از دوستان از من خواستن که مورد شرایط کاری از لحاظ فنی و از لحاظ کنی براشون بنویسم، فکر می‌کنم این مطلب پاسخ جامعی باشه.

محصول کیاسکد

اول از همه چیز بهتره در مورد این توضیح بدم که کیاسکد دقیقا چه کاری می‌کنه. کیاسکد به طور کلی یک شرکت تبلیغاتیه و با استفاده از اسکریپتی که مشتری‌ها توی وب‌سایتشون می‌ذارن، روی صفحاتشون تبلیغات نشون می‌ده. شعار کیاسکد Zero Ad Waste است و منظورشون اینه که سعی می‌کنن تبلیغات رو به صورت هدفمند به کسایی نشون بدن که به احتمال زیاد به محتوای تبلیغ علاقه دارن و در نتیجه هم تبلیغ‌دهنده بابت پولی که پرداخت کرده ضرر نمی‌کنه و هم بیننده تبلیغ وقتش هدر نمی‌ره. اینکه کیاسکد چطور این کار رو انجام می‌ده از حوصله این بحث خارجه (و به من هم البته اجازه نمی‌دن در موردش صحبتی بکنم) ولی می‌تونید اطلاعات بیشتر رو توی وب‌سایت شرکت پیدا کنید.

من در این ۹ ماه روی پروژه‌های زیادی در کیاسکد کار کردم ولی دو تا از مهم‌ترینشون که ملموس‌تر از بقیه‌ان اینا هستن: یکی نوع نمایش تبلیغ In-Scroll است و یکی هم وب‌اپلیکیشن دموی کیاسکد برای موبایل که با اینجا قابل دیدنه (فعلا فقط با آیفون ۶ و بالاتر سازگاره).

بقیه پروژه‌هایی که در کیاسکد روشون کار کردم عموما NodeJS هستن و کاربرد داخلی دارن و متاسفانه نمی‌شه در موردشون یا کدهاشون صحبت کرد.

تیم‌های فنی

توی بخش فنی کیاسکد چند تیم مجزا وجود داره که مهم‌ترینشون اینا هستن: ‌Consumer Front-End، Consumer Back-End، Data Team، Big Data Team، DevOps، Service Operations و Quality Assurance و من توی بخش فرانت-اند کار می‌کنم. همه این تیم‌ها زیرمجموعه Product/Engineering هستن.

نحوه انجام پروژه‌ها

وقتی من وارد کیاسکد شدم برای انجام پروژه‌ها از اسکرام استفاده می‌شد و هر کدوم از تیم‌ها اسپرینت‌های ۲ هفته‌ای جدا داشتن و وظایفشون رو به صورت مستقل انجام می‌دادن و در نهایت به هم وصل می‌شدن. ولی الان مدتی هست که اسپرینت زمانی رو کنار گذاشتیم و برای انجام پروژه‌ها، اون‌ها رو به بخش‌های مستقل تقسیم می‌کنیم و به هر کدوم یه Epic اختصاص می‌دیم. هر Epic شامل افراد لازم برای انجام اون پروژه‌ست و اون افراد در طول انجام اون پروژه به صورت یه تیم باهم روی اون محصول کار می‌کنن تا زمانی که تموم بشه و پروندش بسته بشه. مثلا برای یه محصول خاص ممکنه ۲ نفر از تیم فرانت‌اند و یک نفر از بک‌اند و یک نفر از کنترل کیفیت باهم کار کنن تا پروژه تموم بشه.

من شخصا این روش رو بیشتر می‌پسندم نسبت به روش قبلی (اسپرینت) و احساس می‌کنم با این روش جدید کارها سریع‌تر انجام می‌شن و البته رابطه افراد هم با هم بهتره. چون تو روش قبلی تیم‌ها با هم ارتباط خاصی نداشتن و برای همین ممکن بود خیلی از لحاظ فکری از هم دور باشن.

تکنولوژی‌ها در فرانت‌اند

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

اسکریپت (Library) اصلی

برای برنامه‌نویسی اسکریپت اصلی که در سایت مشتری‌ها به کار می‌ره از ES6 (در نهایت تبدیل به ES5) و AMD استفاده می‌کنیم. ابزار ساختمون (Build Tooling) گرانت (Grunt) هست و از Jasmine برای تست استفاده می‌کنیم. برای تست لایبرری اصلیمون از سه نوع تست: Unit Test، Integration Test و Feature Test استفاده می‌کنیم و برای تست خود ابزارهای ساخت nodeunit رو بکار می‌بریم.

لایبرری اصلی جاواسکریپتمون حدود ۷۰۰ تا یونیت تست و تعدادی هم Integration و Feature تست داره که این‌ها کیفیت محصول رو برامون تضمین می‌کنن. چون کوچکترین اشتباهی که ما در توسعه لایبرری بکنیم روی سایت‌های خیلی بزرگ تاثیر می‌ذاره و ماها به صورت مستقیم باید پاسخگو باشیم. برای همین هیچ کدی بدون تست، گذروندن چند مرحله Code Review و QA Testing وارد پروداکشن نمی‌شه.

ابزارهای سمت سرور

برای توسعه، ساخت و Delivery لایبرری اصلی به تعدادی ابزار سمت سرور نیاز داریم که قبلا این ابزارها در تیم بک‌اند و با php ساخته می‌شدن، ولی ما اون‌ها رو به تیم خودمون منتقل کردیم و همه رو با NodeJS بازنویسی کردیم. با این کار هم سرورها و ابزارهامون سریع‌تر و سبک‌تر شدن و هم زمان توسعه و هزینه نگه‌داری خیلی پایین‌تر اومد. نسخه فعلی نُد که پشتیبانی می‌کنیم 4.2 LTS هست و بهمون امکان استفاده از امکانات جدید ES6 رو می‌ده.

دشبوردها و ابزارهای مانیتورینگ

غیر از دشبورد آماریمون که به دست مشتری‌هامون می‌رسه، بقیه دشبوردها و ابزارهای تحت وب‌مون کاربرد داخلی دارن. برای توسعه این ابزارها در فرانت‌اند از Ember.js و Backbone.js استفاده می‌کنیم. البته بک‌بُن به اصرار من هست و هر ابزاری که قراره من روش کار کنم حتما با بک‌بُن انجام می‌دم چون شخصا ترجیحش می‌دم به Ember. ولی خب نسخه ۲ امبر که همکارام در حال حاضر باهاش در حال توسعه هستند هم بد نیست در کل به نظرم.

ابزارهای کلی

توی کیاسکد از محصولات JetBrains و Atlassian استفاده می‌کنیم. از PHPStorm و WebStorm برای توسعه و از Jira برای مدیریت پروژه‌ها و HipChat برای ارتباطات داخلی. از Gitlab هم که طبیعتا برای گیت. البته هرکدوممون هم حق انتخاب ابزارهای خودمون رو داریم؛ مثلا من ترجیحا Paw رو به جای Postman انتخاب کردم چون فکر می‌کنم خیلی بهتر هست. نسبت مک و لینوکس هم به همدیگه تو بخش فنی ۵۰/۵۰ هست.

بقیه موارد

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

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