مانیتورینگ وضعیت محصول از طریق تعریف متریکهای مناسب
چگونه بفهمیم حال محصول ما خوب است؟
مطلب زیر به قلم سعید مهدویان در وبلاگ فنی بلد ( در سایت ویرگول) منتشر شده است و وبسایت مهندسی داده با هدف بازنشر مطالب مفید در حوزه داده، آنرا بدون هیچ تغییری، باز نشر نموده است.
این روزها اهمیت استفاده از دادهها در شرکتهای بزرگ به منظور بهبود محصولاتی که ارائه میدن، بر کسی پوشیده نیست و خیلی از شرکتهای به صورت data driven تصمیمگیری میکنند. در واقع محور اصلی تصمیم گیریها در حوزههای مختلف از توسعهی محصول گرفته تا استخدام و تبلیغات و فروش، دادههای متنوع اونهاست.
توی هر محصولی، آیتمها و معیارهای بااهمیتی وجود داره که بررسی مداوم اونها به مدیران محصول، کمک میکنه تا ببینن وضعیت فعلی محصول به چه صورتیه و چقدر حالش خوبه یا الان چقدر رضایت نسبی کاربران رو برآورده کرده. به این معیارها و اندازهها، اصطلاحاً متریک گفته میشه.
متریکها در واقع عددها و اندازهگیریهایی هستند که به مدیران کمک می کنه تا ببینن چقدر در مسیر درستی قدم برمیدارن و در مواقعی که داره اتفاق بدی میافته، بهشون هشدار میده تا اقدامات پیشگیرانه رو در دستور کار خودشون قرار بدن.
اینکه چه متریکی تعریف میکنیم و البته چهجوری اون رو حساب میکنیم، خیلی اهمیت داره. خیلی وقتا، تعریف یک متریک اشتباه یا بیاهمیت باعث میشه که اون متریک، کارکرد اصلیش رو از دست بده و تیمها و شرکتها رو گمراه کنه و اونها خیلی دیر متوجه مشکل بشن و گاهی خسارت ناشی از این تاخیر میتونه جبرانناپذیر بشه. پس تعریف یک متریک مناسب واقعا ارزش زیادی داره. اصطلاحاً میگن که متریک باید Actionable باشه تا بتونیم براساس اون، تصمیمهای درستی بگیریم.
بررسی مداوم یک متریک، دید خوبی به آدمها میده تا ببینن در طول زمان، میزان تغییرات اون متریک، چه تأثیری روی اون کسبوکار یا محصول گذاشته. هرچند نیازه که هر از چندگاهی، کل متریکهایی که وجود داره، مجدداً بازنگری بشه. شاید متریکی که مثلاً توی یک بازهی زمانی، مهم و ارزشمند قلمداد میشده، بعد از مدتی، آوردهی خاصی نداشته باشه و لازم باشه یا تغییر کنه یا کلاً حذف بشه و متریک دیگهای به جاش تعریف بشه.
توی تیم بلد هم، بخشهای مختلف، متریکهای متنوعی رو برای مانیتور کردن قسمتهای مختلف محصول، طراحی کردن و از روی نتایج روزانه، هفتگی یا ماهانه، تصمیمهای متناسب رو برای اون بخش از محصول میگیرن.
بعضی از این متریکها خیلی کلان و کلّی هست، مواردی مثل تعداد کاربران هفتگی بلد، تعداد کسانی که از حمل و نقل عمومی بلد استفاده کردن، تعداد پویهایی که توسط کاربران مشاهده شده، فیدبکها و کامنتهایی که برای پویها از سمت کاربران ارسال شده، تعداد مسیریابیهای روزانهی صورت گرفته با بلد و کلّی موارد دیگه.(منظور من از پوی در این نوشتار، point of interest هست. به عبارت سادهتر، هر نقطه یا مکانی از نقشه که میتونه از جهاتی، برای کاربرهای ما حائز اهمیت باشه)
بعضی متریکها هم البته تعریفش خیلی ساده نیست و صرفاً از شمارش یک سری رفتار یا اکشن کاربر حاصل نمیشه و تخصصیتره. البته این مهمّه که در کل، متریک قابل فهم باشه ولی مهمتر از اون، اینه که بتونیم یک رابطهی منطقی و قابلپذیرش بین اون متریک و نتیجهی مدنظرمون (که به همون خاطر اون متریک رو تعریف کردیم)، پیدا کنیم. گاهی گذشت زمان مشخص میکنه که متریک تعریف شده اصولاً متریک مناسبی بوده یا نه.
بررسی همهی انواع متریکهای مختلفی که توی بلد مورد استفاده قرار میگیره، توی این نوشتار میسّر نیست و از حوصله هم خارج میشه. علت این امر اینه که دیتای روزانه و لحظهای که داره توی دیتابیسهای مختلف ذخیره میشه، واقعا زیاده.
خیلی از اکشنها یا رفتارهای کاربر، ذاتاً پرتکرار هستن. مثلا کاربرها صرفا به مشاهدهی یک پوی بسنده نمیکنن و در ادامه، کارهای دیگهای مثل اشتراکگذاری، کپی آدرس، تماس با شماره تلفن ثبت شده، بازکردن سایت در صورت وجود و … رو انجام میدن و همین باعث میشه که تعداد رفتارهای ذخیره شده توی دیتابیسهای ما خیلی زیاد بشه. این دادهها البته با توجه به اینکه در حال حاضر بلد بیشتر از ۵ میلیون کاربر داره، منطقی به نظر میرسه. حجم دادهها تازه توی جاهایی مثل بحث لوکیشن و سرعتهای لحظهای افراد، خیلی خیلی بیشتر و بزرگتر میشه. توی همچین فضای بزرگی از دادهها، تعریف متریکهای Actionable خیلی حیاتیه.
حالا وقتشه یکم توی بحث پویها دقیقتر بشیم!
همونطور که احتمالاً خودتون هم میدونید، یکی از کاربردهای بلد مربوط به نقشه و اطلاعات داخل اون هست. توی نقشهی بلد، پویهای خیلی زیادی در دستهبندیهای مختلف روی نقشه نمایش داده شده. این نقاط میتونه جاهای معروفی مثل یک پارک یا مکان دیدنی باشه، یا جاهای عمومی مثل بیمارستان و پمپ بنزین و بانک و یا حتی یک کسبوکار شخصی مثل سوپرمارکت یا میوهفروشی یا مواردی مشابه اینها.
افراد میتونن با کلیک کردن روی هر پوی، به اطلاعات اضافی که دنبالش هستن، دسترسی داشته باشن. این اطلاعات اضافی، با توجه به دستهبندی اون پوی میتونه چیزهای مختلفی باشه. آدرس، شماره تلفن، ساعت کاری، تصویر اون مکان و همچنین امتیاز و نظرات احتمالی افراد در مورد اون مکان، از جمله چیزهایی هست که برای پویها قابل دسترسیه.
توی بلد، ما از طریق منابع و بانکهای اطلاعاتی بخشهای مختلف، تلاش میکنیم که دو هدف رو دنبال کنیم:
- تکمیل هرچه بیشتر پویهای روی نقشه و رسیدن به جامعیت اطلاعات
- افزایش دقت اطلاعات پویهای نقشه
برای هر دو هدف، ما روی مشارکت کاربرانمون حساب ویژهای باز کردیم و اعتقاد داریم که هیچ کسی مثل خود کاربرها، به اطلاعات محل زندگی یا محل کار یا هر منطقهای که زیاد به اونجا رفتوآمد میکنه، احاطه نداره.
افراد میتونن برای هر پوی یا نقطهی منتخب روی نقشه، توضیح بذارن، اطلاعاتش رو در صورت لزوم اصلاح یا کامل کنن و یا اینکه بهش رأی بدن و تجربشون رو با بقیه به اشتراک بذارن. اهمیت این قضیه وقتی بیشتر میشه که توجه کنیم با گذشت زمان، اطلاعات پویها دستخوش تغییرات زیادی میشه. این گاهی مثلاً ممکنه مربوط به اطلاعات جزیی مثل ساعت کاری یک مکان یا یه کسب و کار باشه یا حتی در موارد مهمتر، اصلا اون مکان جابهجا شده یا کلا عوض شده باشه. مثلاً فرض کنید یه مغازهی سوپرمارکت تبدیل به خشکشویی بشه یا یه رستوران، کلاً آدرسش عوض بشه. با توجه به اینکه آدمای اون محل، اولین افرادی هستند که از تغییرات پویهای اون محل مطلع میشن، بنابراین سریعترین راه برای بهروز نگهداشتن دیتای پویها، افزایش هرچه بیشتر مشارکت آدمها برای اضافه کردن و تصحیح پویهای نقشه هست.
خیلی از بحث اولیه فاصله نگیریم! فهمیدیم که مشارکت کاربران خیلی به ما میتونه کمک کنه. اما:
از سمت ما چه اتفاقاتی در راستای اون اهدافی که ذکر شد، میتونه بیفته؟
اگه ما بخوایم به سراغ غنیکردن و افزایش دقت پویها بریم، بدیهیه که نمیتونیم در قدم اول، همهی دیتای پویها رو به نقشه اضافه کنیم یا همشون رو روی نقشه دقیق کنیم. اینجاست که تعریف متریکهای مناسب، میتونه به کمک ما بیاد. در حقیقت، محدودیتهای زمانی، نیروی انسانی و هزینههای احتمالی، این نیاز رو ایجاد میکنه که یه لیست اولویت درست کنیم و اول سراغ پویها یا دستهبندیهای بااهمیت (از نظر کاربرانمون) بریم.
ما با توجه به دیتایی که از سمت کاربرانمون البته به صورت ناشناس، ذخیره میشه، میتونیم اطلاعات مختلفی رو تحلیل کنیم. مثلا میتونیم ببینیم بیشترین دستهای که توی نقشه توسط کاربران جستجو میشه، کدومها هستند. یا مثلاً بیشترین پویهایی که روی نقشه مشاهده شدن، از چه دستهای بودن یا حتی کمی پیشرفتهتر، رفتاری که بعد از انتخاب اون پوی از کاربران سر زده، برای ما با اهمیت میشه. مثلا با بررسی دیتاها در بازههای زمانی مختلف(مثلا هفتگی یا ماهانه) میتونیم بفهمیم که به عنوان نمونه، برای پویهای با دستهبندی کافه/رستوران، یکی از رفتارهای پرتکرار، تماس با شماره تلفن ذخیره شده برای اون پوی هست.(احتمالا برای رزرو جا یا اطلاع دقیقتر از ساعات کاری یا حتی دادن سفارش) این رفتار کاربر برای هر دستهای ممکنه متفاوت باشه ولی فاکتور یا فاکتورهایی که توی اون دستهبندی خاص، برای ما اهمیت دارن رو بهتر مشخص میکنه.
پیدا کردن یه الگوی رفتاری دقیق از کاربران، با توجه به جنبههای مختلفی که توی این مساله وجود داره، کار سادهای نیست. مثلا ممکنه توی یه برههی زمانی(مثل زمانی که همهگیری کرونا تشدید میشه)، اهمیت پویهای دستهی بیمارستان و درمانگاه و آزمایشگاه افزایش پیدا کنه یا در ایام تعطیلات، رفتارهای مربوط به مسیریابی به مناطق دیدنی افزایش پیدا کنه.
اینجاست که با توجه به متریکهایی که تعریف کردیم و نظارت همیشگی بر اونها، میتونیم تصمیمهای مناسبتری بگیریم. یا مثلاً اگر بخوایم با توجه به محدودیت زمان و محدودیت بودجه، به سراغ غنی کردن دیتای چند دستهی خاص بریم، دید خوبی پیدا کنیم که از کدومها شروع کنیم. در واقع همهی اینها به خاطر اینه که وزن و تأثیر قضاوتهای شخصی ما توی تصمیمگیریها کمتر بشه و معیار اصلی، رفتار کاربران بلد باشه.
به عنوان مثال، یکی از معیارهای مورد علاقهی مدیرای محصول، اینه که کاری کنن که کاربران زمان بیشتری رو با اون محصول بگذرونن. مثلا شرکت هایی مثل فیسبوک و اینستاگرام، خیلی خوب به این هدف رسیدن. به این مسئله engagement میگن. برای هر محصولی، این متریک میتونه تعریف خودش رو داشته باشه و به روش متفاوتی هم اندازه گیری بشه.
مثلا توی بخش نقشه، میتونیم بگیم اگر کاربر صرفاً به نگاه کردن به نقشه اکتفا نکنه یا بعد از مشاهدهی یک پوی، یک مجموعه عملیات یا اینتراکشن رو انجام بده، این یعنی اینکه میزان engagement در بخش پویها بالاتر رفته. منظور از اینتراکشن، میتونه یکی از کارهای اشتراک گذاری مکان، تماس با شماره تلفن، وارد شدن به سایت یا اکانت اینستاگرام اون مکان و چیزهایی مثل این باشه. پس هدف ما می تونه اینجوری تعریف بشه که میزان اینتراکشن کاربران برای هر پوی مجزا رو افزایش بدیم. حالا این چه جوری اندازهگیری میشه؟
متریک ما مثلاً میتونه اینجوری تعریف بشه: «نسبت تعداد پویهای با حداقل یک اینتراکشن از سوی کاربر به تعداد کل پویهای موجود روی نقشه در مدت یک ماه»
هرچی این نسبت افزایش پیدا کنه، میشه نتیجه گرفت که دیتای جانبی پویها، دیتای ارزشمندتری بوده که در قبال اون، کاربر انگیزهی ادامهی کار با اون مکان نقشه رو هم پیدا کرده. پس عملا ما به افزایش engagement کاربران کمک کردیم.
یه چیزی توی انتخاب متریکها باید خیلی مورد توجه قرار بگیره. و اونم اینکه معیاری انتخاب نکنیم که گولزننده باشه و ما رو گمراه کنه. مثلاً ممکنه برای همین مسالهی engagement، متریک رو صرفاً تعداد پویهای دارای اینتراکشن تعریف کنیم و هدفمون افزایش این معیار باشه. واقعیت اینه که این خیلی متریک مناسبی نیست، چون معمولا ما با توجه به توسعهی محصولمون، روزانه تعدادی کاربر جدید داریم و علاوه بر اون، هر روز که میگذره تعداد پویهای روی نقشه رو هم افزایش میدیم و کاملترش می کنیم. پس طبیعیه که انتظار داشته باشیم تعداد پویهایی که از سمت کاربر، با اینتراکشنی همراه بودن، افزایش پیدا کنه. بنابراین افزایش چنین متریکی نباید ما رو خیلی خوشحال کنه. در واقع باید این افزایش پویهای با اینتراکشن، همگام با رشد کاربران محصول و رشد تعداد پویهای ثبت شده روی نقشه باشه و اون موارد رو هم لحاظ کنه. برای همینه که ما از «نسبت پویهای دارای اینتراکشن به تعداد کل پویهای روی نقشه» استفاده می کنیم تا شهود بهتری از engagement کاربران داشته باشیم. اینکه بدونیم مثلا نسبت پویهای همراه اینتراکشن به کل پویها، از میزان x درصد به y درصد رسیده، خیلی شهود بهتریه تا اینکه به عدد اکتفا کنیم و مثلا بگیم از تعداد x هزار پوی دارای اینتراکشن به تعداد y هزار پوی رسیدیم. چون مورد دومی همونطور که ذکر شد، لزوما نشوندهنده ی engagement کاربران نیست و بخشی از اون میتونه ناشی از افزایش کاربران بلد و افزایش تعداد پویها باشه.
بیاید یه مثال دیگه رو بررسی کنیم:
بر اساس تحقیقاتی که روی رفتار کاربران حوزهی تکنولوژی توی کل دنیا انجام شده، مشخص شده که حدود هفتاد درصد اپلیکیشنها، بعد از دانلود فقط یک بار استفاده میشن و دیگه کاربر هیچ وقت سراغ اون اپلیکیشن یا محصول نمی ره.
برای همین، چیزی که برای خیلی از مدیران محصول اهمیت داره، مراجعه و استفادهی چندبارهی کاربران به اون محصوله و این رو نشون میده که اون محصول واقعا از نگاه کاربر، چیز باارزشیه و اصطلاحاً برای کاربر ارزش خلق می کنه. به این مسئله retention گفته میشه. برای اندازهگیریش هم در واقع باید متریکی تعریف کنیم که بیانگر بازگشت دوباره یا چندبارهی کاربر و استفادهی مجددش از محصول در یک بازهی زمانی مشخصه. این که استفاده رو چی تعریف کنیم یا بازهی زمانی رو چقدر بگیریم، چیزیه که بسته به کاربرد اون محصول و براساس تجربههای کاربری افراد به دست میاد.
توی بلد، هر کاربری که ثبت نام میکنه، به صورت اتوماتیک یه شناسه یا id بهش اختصاص داده میشه. چیزی که فقط منحصر به همون کاربره. حالا فرض کنید میخوایم برای کار با پویها یه متریک که معرف retention باشه، در همون حوزهی پوی، تعریف کنیم. میتونیم بگیم اگه کاربری در یک هفته بیش از دوبار و در دو بازهی زمانی متفاوت، روی بخش جزئیات اطلاعات مکان کلیک کرده، به این معنیه که به این ویژگی نقشه علاقهمنده و احتمالا اطلاعات پویها براش مفید بوده. اینکه چه جوری بفهمیم کاربری که الان روی جزئیات یک مکان کلیک کرده، همون آدمیه که مثلا دیروز هم روی جزئیات یک پوی دیگه کلیک کرده، به کمک همون شناسهی کاربر انجام میشه. نظارت همیشگی روی این متریک که معیاری از retention هست، مخصوصاً در زمانهایی که ما در بخش پویها یا نحوهی مشارکت کاربران تغییری میدیم، خیلی حیاتیه و میتونه به افراد تصمیمگیر، در اتخاذ تصمیمهای بهتر در جهت اصلاح یا تثبیت اون تغییرات کمک کنه.
حوزهی کار با دیتا در مجموعهی بلد، خیلی گسترده و بزرگه. ذکر همهی متریکهایی که توی بخش پوی نقشه و بخشهای دیگه مثل مشارکت کاربران، مسیریابی و ترافیک و… وجود داره، نیاز به وقت و حوصلهی زیادی داره که شاید توی مقالههای بعدی، بتونیم بیشتر در موردشون صحبت کنیم.
البته استفاده از دادهها، صرفاً برای تعریف متریکهای مناسب جهت نظارت بر نحوهی پیشرفت محصول، خلاصه نمیشه. توی یه مطلب دیگه از کاربردهای آماری مجموعهی دیتای بسیار بزرگمون برای بحث رفتارشناسی کاربران بلد توی سفر، بررسی جادهها و اتوبانهای بین شهری و ترافیک اونها در ایام مختلف سال و تأثیر تصمیمگیریهایی که قانونگذاران کشوری (در بحث رفتوآمد و موارد اینچنینی) به واسطهی همهگیری ویروس کرونا اعمال میکنن، میپردازم و اشاره میکنم که چطور این تحلیلها میتونه مبنای قضاوت ما در مورد درستی یا نادرستی این تصمیم گیریهای کلان کشوری باشه.
صادرکننده متریک پرومتئوس بنویس!
چرا و چگونه برای نرمافزاری که مینویسیم، صادرکننده متریک پرومتئوس بسازیم. prometheus پیشزمینه پرومته یا پرومتئوس در اسطورههای یونان…
http://blog.nejati.net/write-prometheus-metrics-exporter