toggl و دیگر ابزارهای محاسبه زمان

یکی از دغدغه‌های کسانی که روی پروژه‌های مختلف کار می‌کنند یا با شرکت‌های متعدد همکاری دارند یا به طور خلاصه مشاور و فریلنسر و remote worker هستند محاسبه زمان صرف شده روی هر پروژه و برای هر شرکت است. من مدت‌ها از اکسل و کالک (معادل اکسل در مجموعه LibreOffice) برای این کار استفاده می‌کردم. هر چند این روش سنتی جوابگو بود ولی کارایی پایینی داشت و وقت زیادی از من می‌گرفت. چند ماه پیش تصمیم گرفتم فکری به حال این موضوع بکنم. پس از بررسی چندین ابزار موجود به toggl رسیدم که تبدیل به کشف با‌ارزشی شد و کار محاسبه زمان را خیلی ساده‌تر و سریع‌تر کرد.

 

تاگل یک برنامه کوچک محاسبه زمان است. به این شکل که شما هر وقت شروع به انجام کاری می‌کنی دکمه استارت اون رو می‌زنی و هر وقت که کار روی اون موضوع تمام شد دکمه پایان را می‌زنی. تاگل هم در عوض زمان صرف شده را به تفکیک روز، هفته، ماه و … و به تفکیک پروژه‌های مختلف و با آمارها و نمودارهای مختلف به تو اعلام می‌کند. تاگل مزایای خیلی زیادی دارد. یکی از مزایای مهم اون چند platform بودن اون است. تاگل روی وب (از طریق browser) کار می‌کند و برای ویندوز، اوبونتو، اندروید و پلتفرم‌های دیگه هم app مخصوص دارد. همه این appها به خوبی با هم sync هستند. من کاری را روی وب شروع می‌کردم، بعدش browser را می‌بستم و از طریق app ویندوزی می‌دیدم که چقدر از شروع اون task گذشته و می‌توانستم از آنجا stop کنم یا اینکه کامپیوترم را خاموش کنم و یک سیستم اوبونتو را روشن کنم و از آنجا این کار را کنم. وقتی هم که بیرون بودم یا جلسه‌های خارج از دفتر یا جلسات تلفنی داشتم می‌توانم از نسخه اندرویدی استفاده کنم.

 

تاگل در همه پلتفرم‌هایی که من اسم بردم خیلی عالی کار می‌کند. انعطاف پذیری خوبی دارد و خیلی خوب sync می‌شود. کنترل‌های انتخاب تاریخ و زمان اون در همه جا بدون نقص کار می‌کند. Toggl ابزار گزارش‌گیری کامل و خوبی دارد. می‌شود به راحتی و به تفکیک زمان‌های مختلف از اون گزارش گرفت. می‌شود اطلاعات را به تفکیک پروژه درخواست کرد و نمودارهای مختلفی بر اساس اون ترسیم کرد. گزارش‌ها قابلیت تهیه خروجی به pdf و csv را دارا هستند. با نسخه پولی تاگل می‌شود تیم داشت و حتی کارفرما/رییس را هم در تاگل وارد کرد تا گزارش‌ها را به صورت مستقیم ببینند. علاوه بر این می‌شود نرخ ساعتی را مشخص کرد تا علاوه بر محاسبه زمان، صدور فاکتور هم انجام بگیرد. البته من امکانات پولی تاگل را تا حالا امتحان نکرده‌ام.

toggl

تا اینجا از مزایای تاگل گفتم و اینکه خودم حدود سه ماه است که به خوبی از اون استفاده کنم. متأسفانه یکی دو روز پیش تیغ تحریم شامل حال تاگل هم شد و الان که اوایل آذر ۱۳۹۵ است تاگل از دسترس خارج شده است. نه وب آن باز می‌شود و نه appهای اون کار می‌کنند. تنها راه استفاده از اون پنهان کردن IP است که اون هم مشکلات خاص خودش را دارد. یک جایی شنیده بودم که آلمان هنوز با تحریم‌های زمان جنگ سرد و حتی قبل از اون دست و پنجه نرم می‌کند. فکر می‌کنم تحریم‌های ایران هم حالا حالاها دست از سر ما بر ندارند. پس باید کاری کرد و ابزار جایگزینی پیدا کرد.

 

RescueTime ابزار مناسبی به نظر میاد. نسخه اوبونتو هم داره. ولی نصب اون با اشکال مواجه شد. ابزار Time Doctor هم نسخه اوبونتو داره که بدون مشکل هم نصب شد ولی هم app اون و هم وب اون خیلی شلوغ و به هم ریخته است. نسخه مجانی آن هم فکر می‌کنم چنگی به دل نزند. Desk Time هم نسخه اوبونتو دارد که اتفاقاً خیلی سبک است. ظاهر تمیزتری دارد و فکر می‌کنم نسخه رایگان اون امکانات بهتری داشته باشد. انگار سادگی و سبکی اون بی دلیل هم نیست. امکان تفکیک کارها در پروژه‌ها وجود ندارد. یعنی وقتی که دارید روی پروژه خاصی کار می‌کنید نمی‌تونید task اون رو هم مشخص کنید. ابزار timecamp را امتحان کردم ولی نسخه اوبونتو اون اشکال داشت و در ماشین من کار نمی‌کرد. از timble هم نتیجه مثبتی نگرفتم. نسخه اوبونتو به زحمت نصب شد ولی آخر سر نتوانستم لاگین کنم.

 

بعضی از این ابزارها امکان itegration به خیلی از ابزارهای دیگه از جمله ابزارهای مدیریت پروژه مثل Jira را هم دارا هستند که مورد Jira به طور به‌خصوص برای من خیلی با‌ارزش است. البته بعید می‌دانم در نسخه‌های مجانی این امکانات به طور کامل وجود داشته باشد. بعید است که هر کدام از ابزارهای time tracking برای لینوکس و اوبونتو نسخه داشته باشند ولی برای ویندوز نداشته باشند. بنابراین اگر در ویندوز هم از اونها استفاده می‌کنید چندان نگران نباشید. من ابزارهایی که نیاز به پنهان کردن IP داشته‌اند را بررسی نکرده‌ام. بیشتر مواردی که در پاراگراف قبل بررسی کردم را از اینجا پیدا کردم.

 

خیلی از استارتاپ‌های ایرانی بر مبنای دو چیز ساخته شدند. یکی تحریم‌ها که باعث شده در فضای ایزوله از بقیه دنیا زندگی کنیم و دسترسی به سرویس‌های رایج دنیا نداشته باشیم پس مجبور هستیم خودمون لنگه اونها را بسازیم و دیگری گران قیمت بودن سرویس‌های خارجی به دلیل ارزش پایین پول ایرانی. این دو موضوع در مورد ابزارهای time tracking هم صادق هستند. اگر روزی تصمیم گرفتید به عنوان یک ایده استارتاپی به سراغ ابزارهای time tracking بروید سعی نکنید که همه چیز را از اول خودتان ایجاد کنید. نوشتن app برای platformهای مختلف و ایجاد اون همه سیستم گزارش گیری کار بسیار سخت و زمان بری است. اقلاً به یک تیم شش هفت نفره به مدت یک الی دو سال نیاز دارید. به جای این بهتر است به سراغ راه حل‌های open source بروید و سعی کنید تمرکزتان را فقط روی اجرای سرویس بگذارید نه روی نوشتن ابزارها.

به روز رسانی:

هیچ کدام از ابزارهایی که در متن بررسی کردم مناسب نبودند. یا پولی بودند یا نسخه مخصوص اوبونتوی اونها به خوبی کار نمی‌کرد. در خود اوبونتو یک ابزار ساده به اسم Hamster هست برای time tracking که من از این ابزار چون sync نداشت و فایل اون به طور کامل آفلاین بود استفاده نمی‌کردم. الان متوجه شدم که با یک روش جالب می‌شوند مشکل backup فایل دیتابیس اون را حل کرد. در این روش فایل دیتابیس از محل واقعی اون برداشته و به drop box منتقل می‌شود. سپس در محل فایل دیتابیس یک symlink ساخته می‌شود. به این ترتیب اطلاعات Hamster در DropBox ذخیره می‌شود نه در فایل سیستم به طور آفلاین. اینجا و اینجا را ببینید.

پیدا کردن محل کار عمومی: کتابخانه فرهنگ‌سرای رازی

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

 

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

 

فرهنگ‌سراها و کتابخانه‌های عمومی دارای یک سری مشخصه‌های عمومی هستند که رازی هم از آن‌ها مستثنا نیست. مثل عدم امکان استفاده از تلفن و عدم امکان صحبت‌های حضوری. سالن مطالعه کتابخانه رازی هم مملو از دانشجویان و کنکوری‌هاست ولی با وجود این طیف افراد بالای ۳۰ سال را در اینجا هم می‌شود پیدا کرد. چند نکته متمایز کننده در فرهنگ‌سرای رازی دیدم که در جاهای دیگر کمتر دیده بودم. کتابخانه رازی دارای کمد وسایل برای اعضا است، گرمکن غذا دارد و سالن مطالعه آن خیلی پر نور است. سخت‌گیری آن در قیاس با کتابخانه فرهنگ‌سرای سرو خیلی کمتر است. فقط ورود افراد چک می‌شود و آن هم چندان سفت و سخت نیست. طبیعتاً به علت سخت‌گیری کمتر کمی سر و صدا در سالن مطالعه وجود دارد، رفت و آمد زیاد است و میزها دارای نوشته‌های بی‌ربط بیشتری است. یکی از نکات منفی سالن مطالعه این است که سالن به صورت یک فضای یک تیکه و به هم پیوسته است و میزها در چند ردیف به طور کامل به هم چسبیده‌اند. راجع به اینترنت آنجا سؤال نپرسیدم ولی اینترنت ایرانسل خیلی بد بود و در عوض اینترنت همراه اول مناسب بود.

 به چند عکس از فرهنگ‌سرای رازی توجه کنید و اگر تجربه مشابهی دارید با من و بقیه هم در میان بگذارید.

 

نمای بیرونی کتابخانه رازی

ردیف‌های متعدد میزهای مطالعه

صندلی‌های چسبیده به هم در سالن مطالعه کتابخانه رازی

 

به روز رسانی ۱:

در کتابخانه فرهنگ سرای رازی گهگاه صدای هواپیماهایی که می‌خواهند در فرودگاه مهر آباد فرود بیایند شنیده می‌شود.

به روز رسانی ۲:

استفاده کنندگان نهارشان را در همان سالن مطالعه سر همان میزی که مطالعه می‌کنند صرف می‌کنند. این بی نظمی یا آزادی عمل به شکل دیگری هم وجود دارد. افراد میزهایشان را با گذاشتن کتاب رزو می‌کنند. یعنی در حالی که حضور ندارند میزهای مطالعه را اشغال می‌کنند.

وقتی که کتاب‌دارها کتاب‌دار نیستند

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

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

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

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

فکر می‌کنید تذکر و شکایت چقدر مشکل را حل کند؟ بی انگیزگی سرتاسر جامعه کاری ما خصوصاً در بخش کارمندی را پوشانده است. کتابدارها به کتاب علاقه ندارند، برنامه‌نویس‌ها حوصله ندارند خارج از شرکت روی پروژه‌های آموزشی خودشان وقت بگذارند، حسابدارها فقط آن چیزی که ۲۵ سال پیش یاد گرفته بودند را استفاده می‌کنند، پرستارها فقط عملیات روتین را بلد هستند و از مریض فراری هستند، معلم‌ها کار تدریس را به عنوان کار فرعی خود نگاه می‌کنند و… این همه فیلترهای مختلف در استخدام وجود دارد. وقتش نرسیده به انگیزه و اشتیاق کاری اهمیت بیشتری بدهیم؟

من بیشتر روزها از هدفون استفاده می‌کنم. ولی امروز که هدفونم را فراموش کرده بودم به هیچ وجه نتونستم تمرکز داشته باشم. با اینکه صبح خیلی با انگیزه و با آمادگی ذهنی روزم را شروع کردم ولی ناچار شدم خیلی زود برگردم. در هر شغلی که هستید انگیزه داشته باشید و برای اون تلاش کنید. کنج عافیت تا به کی؟

جمع کردن تیم برای یک کار ریموت

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

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

علاوه بر بهبود رزومه توصیه می‌شود که برنامه‌نویسان ردی از خودشان در فضای آنلاین به جا بزارند که بیشتر بشود با اونها، تجارب و سلایقشون آشنا شد. همکاری در یکی تا دو تا پروژه open source، نوشتن وبلاگ، جواب دادن به سؤالات در StackOverflow و موارد مشابه کمک زیادی در این موضوع می‌کنند. مشارکت در eventها و کنفرانس‌ها و همایش‌های غیر مجازی هم با‌ ارزش است.

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

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

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

ایده‌آل یک تیم remote این است که افراد مستقل از زمان و مکان باشند. اما در یک دنیای واقعی، استقلال از زمان کار ساده‌ای نیست. در یک پروژه معمولی و در یک تیم معمولی نیاز هست که افراد بیشترین ساعت کار مشترک را با هم داشته باشند و اگر هم این مقدور نیست اقلاً ساعت کارها منظم و از قبل مشخص شده باشد. این مشکلی بود که با یکی دو تا از کاندیداها داشتیم. اونها می‌خواستند زمان کاری‌شان باز بشد و هر روز در زمانی که از قبل معلوم نیست و برای خودشان مناسب است شروع به کار کنند.

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

این قصه سر دراز دارد. در صورت مناسب بودن شرایط، راجع به ادامه این تجربه، خصوصاً در مورد موضوع دورکاری و تفاوت‌های فرهنگی و تایم زون هم خواهم نوشت. شما هم اگر تجربه مشابهی دارید ما را بی نصیب نگذارید.

سندرم بدیهی انگاری

یکی از دوستان یکی از مشکلات فروش در استارتاپ‌های عمدتاً فنی را مسخره کردن مشتری‌های توسط تیم فروش عنوان کرده بود. هر چند که این موضع کمی اغراق آمیز به نظر می‌رسد اما وقتی که یک برنامه‌نویس یا یک IT Man حرفه‌ای در تیم فروش یا تیم پشتیبانی کار می‌کند احتمال وقوع این اتفاق خیلی بالا می‌رود.

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

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

programmers-none-programmers

برای کاهش این مشکلات راهکارهای مختلفی هست… من می‌خواهم به این موضوع اشاره کنم که این مشکل فقط مربوط به برنامه‌نویس‌ها نیست. تقریباً بقیه اصناف، صنایع و افراد دیگر هم به نوعی با این مشکل روبرو هستند.

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

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

اگر خوب فکر کنید می‌بینید که این مدل برخوردها را در خیلی جاهای دیگه هم دیده و می‌بینید. ما (برنامه‌نویس‌ها) تنها نیستیم!

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

بررسی فریمورک‌های توسعه وب

بررسی و مقایسه فریمورک‌های مختلف توسعه وب و پلتفرم‌های توسعه نرم‌افزار تبدیل به یکی از فعالیت‌های همیشگی من شده. فریمورک‌های مختلفی مثل ASP.NET MVC و Rails و Django و MEAN (Node.js) را بر اساس معیارهای مختلف مثل سرعت یادگیری، سرعت توسعه، سرعت اجرا، Reusablity، امکان توسعه در دسکتاپ‌های غیر ویندوزی، بازار کار، Batteryها، Startup Friendly بودن و چیزای دیگه مقایسه می‌کنم. انصافاً هم بررسی راحتی نیست. خصوصاً اگر تجربه کار با تک تک اونها را نداشته باشید. هر کدام از این فریمورک‌ها برای شرایط به‌خصوصی مناسب هستند.Rails بازار کار خوبی در خارج ایران دارد، یادگیری و استفاده از اون راحت است و معماری اون شباهت زیادی به ASP.NET MVC دارد. Startup Friendly است و خیلی سریع می‌شود باهاش MVP (حداقل محصول) تولید کرد. ریلز جامعه کاربری پویا و Battery های فراوانی داره. ولی در عوض سرعت اجرای پایینی دارد و به همین دلیل در کاربردهایی که سرعت مهم است مناسب نیست. در این‌طور موارد بعضاً با Node.js جایگزین می‌شود. برنامه‌نویس‌های ریلز در ایران خیلی کم پیدا می‌شوند و بر خلاف C# و Python و JavaScript که با یادگیری یک زبان میشه چند کار دیگه هم انجام داد (مثل توسعه نرم‌‌افزارهای desktop یا توسعه Front End)، با روبی فقط میشه یک کار انجام داد و اون هم توسعه وب است.
Django ماهیتاً تفاوت زیادی با Rails و ASP.NET MVC نداره ولی دو تا چیز مفید توی جانگو هست که توی اون دو تای دیگه نیست. بخش Admin جانگو در applicationهای وبی که بخش ادمین دارند (بیشتر پروژه‌های وبی سفارش مشتری) کار راه بندازه و صرفه‌جویی زمانی خوبی خصوصاً در اول پروژه ایجاد می‌کنه چون نیاز به پیاده‌سازی CRUDهای تکراری رو از بین می‌بره. جانگو یک امکان خوب دیگه هم برای صرفه‌جویی زمانی در طول پروژه‌های مختلف داره. اسم این امکان خوب، app است. هر پروژه در جانگو به چند app تقسیم می‌شود. App ها می‌توانند در پروژه‌های مختلف استفاده بشوند بدون آنکه وابستگی کدی خیلی زیادی داشته باشند. مثلاً شما می‌تونید یک app برای ticketing یا accounting داشته باشین و اونو برای چند پروژه دیگه هم به عینه استفاده کنید بدون آنکه مجبور به کپی کد از یک پروژه به پروژه دیگه و داشتن چندین نسخه از یک کد بشوید. بدی جانگو اینه که بازار کار خیلی کوچک‌تری از Rails و ASP.NET داره و خیلی کمتر شناخته شده است. یادگیری اون هم نسبت به Rails سخت‌تر است.

ASP.NET MVC در ایران و خارج از ایران رواج زیادی داره. برنامه‌نویس‌هاش رو خیلی راحت میشه پیدا کرد. بازار کار خوبی داره. در محیط‌های Enterprise مقبول‌تره، پشتیبانی از دیتابیس‌های خیلی زیادی رو داره، و پشت اون زبان چند منظوره و به روز C# قرار داره. ولی هنوز چندان Cross Platform نیست. جامعه کاربری آن پویایی جامعه کاربری Rails یا Nodes.js رو نداره. و تازه چند ماهه که میشه روی دسکتاپ لینوکسی باهاش کار کرد. Batteryهای اون کمتره و در دنیای Open Source محبوبیت کمتری داره.

راجع به Node.js نمی‌تونم چیز زیادی بگم چون تجربه کمی از اون دارم، به شدت در حال توسعه و تغییره و دنیای وسیعی هم داره. Node.js خودش فریمورک توسعه وب نیست بلکه چیزهایی مثل MEAN فریمورک هستند. سرعت اجرای Node.js خیلی بالاست. موضوع روزه و خیلی خوش رزومه‌است. زبان برنامه‌نویسی اون در front end هم کاربرد داره و افراد زیادی از قبل با اون آشنا هستند. اما مشکلش اینه که هنوز در حال توسعه و تغییره، گویا با دیتابیس‌های متعارف Relational رابطه خوبی نداره و علاوه بر این درست در نقطه مقابل Rails شما مجبور هستید برای انجام هر کاری اونو به طور کامل تعریف کنید و جزییاتش رو مشخص کنید تا قابل استفاده باشه.

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