ویرگول
ورودثبت نام
شایان میرزایی
شایان میرزاییFrontend Lead و مهندس ارشد نرم‌افزار در اسنپ‌فود. اینجا از چالش‌های واقعی ساخت محصول و کار با تیم‌ها می‌نویسم؛ از معماری فرانت‌اند و ابزارهای AI تا رهبری مهندسی و مدل‌های ذهنی تصمیم‌گیری.
شایان میرزایی
شایان میرزایی
خواندن ۱۰ دقیقه·۲ ماه پیش

تئوری بازی‌ها؛ وقتی تصمیم درست فقط به تصمیم شما بستگی نداره

چند سال پیش، اولین بار توی دانشگاه اسم Game Theory یا تئوری بازی‌ها رو شنیدم.

اسمش برام جذاب بود و یکم هم درباره‌ش خوندم، ولی هیچ‌وقت خیلی جدی دنبالش نکردم.

تا اینکه مدتی پیش دوباره بهش برگشتم.

یکی از چیزهایی که دوباره منو درگیر این موضوع کرد، دیدن فیلم A House of Dynamite بود.

بدون اینکه وارد داستان فیلم و Spoil کردنش بشم، بخش زیادی از چیزی که برای من جذاب بود حول یک مسئله می‌چرخید:

وقتی اطلاعات کامل نداریم، نمی‌دونیم طرف مقابل قراره چه کاری انجام بده و تصمیم اشتباه هم می‌تونه هزینه خیلی زیادی داشته باشه، چطور باید تصمیم بگیریم؟

این سؤال باعث شد دوباره برگردم سراغ Game Theory.

و این بار چیزی که برام جذاب بود خود فرمول‌ها و مدل‌های ریاضی نبود.

بیشتر یک سؤال ساده بود:

اصلاً تصمیم درست یعنی چی، وقتی نتیجه تصمیم من فقط به خودم بستگی نداره؟


اصلاً Game Theory درباره چیه؟

اگر بخوایم خیلی ساده نگاه کنیم، Game Theory درباره موقعیت‌هاییه که نتیجه تصمیم شما، علاوه بر تصمیم خودتون، به تصمیم بقیه هم بستگی داره.

و نکته مهم دقیقاً همین قسمت آخره:

بقیه.

خیلی از مدل‌های ساده تصمیم‌گیری این شکلی‌ان:

من چند انتخاب دارم → پیامد هر انتخاب رو بررسی می‌کنم → بهترین رو انتخاب می‌کنم.

ولی دنیای واقعی معمولاً این‌قدر ساده نیست.

فرض کنید دارید با یک شرکت مذاکره می‌کنید.

نتیجه فقط به پیشنهاد شما بستگی نداره؛ به واکنش اون شرکت هم بستگی داره.

دو تیم Engineering دارن روی یک پروژه کار می‌کنن.

نتیجه فقط به تصمیم تیم شما بستگی نداره؛ به تصمیم تیم مقابل هم وابسته‌ست.

دو شرکت دارن با هم رقابت می‌کنن.

یک کشور باید نسبت به تصمیم کشور دیگه واکنش نشون بده.

حتی در روابط روزمره هم همین اتفاق می‌افته.

یعنی ما فقط «تصمیم» نمی‌گیریم.

ما داخل یک بازی تصمیم می‌گیریم که Playerهای دیگه‌ای هم داره.

و یکی از معروف‌ترین مثال‌ها برای فهم این موضوع، Prisoner's Dilemma است.


Prisoner's Dilemma

فرض کنید دو نفر به جرم مشترکی دستگیر شدن.

پلیس اون‌ها رو در دو اتاق جدا قرار می‌ده، طوری که نمی‌تونن با هم ارتباط داشته باشن.

هر کدوم دو انتخاب دارن:

Cooperate — سکوت کنه.

یا:

Defect — علیه نفر مقابل شهادت بده.

حالا چند حالت ممکنه اتفاق بیفته.

اگر هر دو سکوت کنن، هر دو مجازات نسبتاً کمی می‌گیرن.

اگر یکی سکوت کنه و اون یکی خیانت کنه، کسی که خیانت کرده تقریباً آزاد می‌شه و کسی که سکوت کرده مجازات سنگینی می‌گیره.

و اگر هر دو خیانت کنن، هر دو مجازات قابل توجهی می‌گیرن.

در نگاه اول جواب ساده به نظر می‌رسه:

خب هر دو همکاری کنن!

مشکل فقط اینه که شما نمی‌دونید نفر مقابل چه کاری انجام می‌ده.

فرض کنید من سکوت کنم.

اگر تو هم سکوت کنی، عالیه.

ولی اگر تو خیانت کنی، من بدترین نتیجه ممکن رو می‌گیرم.

حالا از اون طرف فکر کنم:

«شاید تو هم دقیقاً همین تحلیل رو انجام بدی و تصمیم بگیری خیانت کنی. پس بهتره من زودتر خیانت کنم.»

ولی احتمالاً تو هم داری همین فکر رو درباره من می‌کنی.

نتیجه؟

ممکنه هر دو تصمیمی بگیریم که از دید خودمون کاملاً منطقیه، ولی در نهایت به نتیجه‌ای برسیم که برای هر دومون بدتره.

و به نظرم این یکی از جذاب‌ترین ایده‌های Game Theoryه:

تصمیم منطقی برای یک فرد، لزوماً بهترین نتیجه برای کل سیستم رو ایجاد نمی‌کنه.


ولی اگر بازی فقط یک بار نباشه چی؟

اینجاست که ماجرا برای من خیلی جذاب‌تر شد.

Prisoner's Dilemma در ساده‌ترین حالت یک تعامل یک‌باره‌ست.

اما خیلی از تعامل‌های واقعی ما یک‌باره نیستن.

فردا دوباره همکارمون رو می‌بینیم.

هفته بعد دوباره باید با همون تیم کار کنیم.

ماه بعد دوباره با همون شرکت مذاکره داریم.

یعنی بازی تکرار می‌شه.

و وقتی بازی تکرار می‌شه، تصمیم امروز من فقط نتیجه امروز رو مشخص نمی‌کنه.

روی رفتار فردای تو هم تأثیر می‌ذاره.

همین سؤال تبدیل شد به یکی از معروف‌ترین آزمایش‌های Game Theory.


Axelrod یک مسابقه برگزار کرد

اواخر دهه ۱۹۷۰، Robert Axelrod یک سؤال جالب مطرح کرد:

در یک Prisoner's Dilemma تکرارشونده، بهترین Strategy چیه؟

اون از محقق‌ها خواست Strategyهای خودشون رو برای بازی ارسال کنن.

بعد این Strategyها بارها در مقابل هم بازی کردن.

بعضی Strategyها پیچیده بودن.

بعضی سعی می‌کردن رفتار حریف رو پیش‌بینی کنن.

بعضی کاملاً تهاجمی بودن.

بعضی سعی می‌کردن از الگوهای پیچیده استفاده کنن.

ولی یکی از Strategyهایی که عملکرد خیلی خوبی داشت، به شکل عجیبی ساده بود:

Tit for Tat

منطقش تقریباً این بود:

اول همکاری کن.

بعد از اون:

کاری رو انجام بده که طرف مقابل در دور قبلی انجام داده.

اگر همکاری کرد، همکاری کن.

اگر خیانت کرد، خیانت کن.

اگر دوباره همکاری کرد، دوباره همکاری کن.

همین.


چرا Tit for Tat این‌قدر جالبه؟

چیزی که برای من جذابه، سادگی خود Algorithm نیست.

رفتاریه که ازش بیرون میاد.

Tit for Tat چند ویژگی مهم داره.

اول با همکاری شروع می‌کنه

یعنی فرض اولیه‌ش این نیست که:

«حتماً طرف مقابل می‌خواد منو دور بزنه.»

اولین حرکتش Cooperativeـه.

به طرف مقابل فرصت همکاری می‌ده.

ولی ساده‌لوح نیست

اگر طرف مقابل Defect کنه، بدون واکنش ادامه نمی‌ده.

رفتار بد هزینه داره.

یعنی Strategy نمی‌گه:

همیشه خوب باش.

می‌گه:

من آماده همکاری‌ام، تا وقتی تو هم آماده همکاری باشی.

کینه‌ای هم نیست

شاید این قسمت از همه برام جالب‌تر باشه.

اگر طرف مقابل یک بار خیانت کنه، Tit for Tat جواب می‌ده.

ولی اگر دور بعد دوباره همکاری کنه، بازی برمی‌گرده به همکاری.

قرار نیست یک اشتباه تا ابد مجازات بشه.

و رفتارش قابل فهمه

طرف مقابل خیلی سریع متوجه می‌شه:

اگر همکاری کنم، همکاری می‌بینم.

اگر خیانت کنم، احتمالاً جوابش رو می‌گیرم.

این Predictability خودش بخشی از Strategyه.


پس راز زندگی رو پیدا کردیم؟ همیشه Tit for Tat بازی کنیم؟

نه :)

و فکر می‌کنم اینجا باید حواسمون باشه Game Theory رو تبدیل به کتاب Self-help نکنیم.

Tit for Tat در شرایط مشخصی عملکرد خوبی داشته و نتیجه بازی می‌تونه با تغییر شرایط عوض بشه.

مثلاً یک مشکل مهم، Noiseـه.

فرض کنید من قصد همکاری داشتم، ولی شما رفتار من رو اشتباه برداشت کردید.

فکر کردید Defect کردم.

پس شما هم Defect می‌کنید.

من رفتار شما رو می‌بینم و فکر می‌کنم:

«خب، پس اون خیانت کرد.»

و من هم جواب می‌دم.

حالا ممکنه وارد یک چرخه از رفتارهای منفی بشیم که در اصل هیچ‌کدوم قصد شروعش رو نداشتیم.

دنیای واقعی پر از همین Noiseهاست.

Miscommunication.

اطلاعات ناقص.

برداشت اشتباه.

Incentiveهای متفاوت.

قدرت نابرابر.

و آدم‌هایی که لزوماً Rational Player نیستن.

بنابراین نکته‌ای که از Tit for Tat می‌گیرم این نیست که:

«این بهترین روش برخورد با همه آدم‌هاست.»

چیزی که برام جالب‌تره اینه که:

وقتی تعامل تکرار می‌شه، Strategy خوب ممکنه کاملاً با Strategy یک تعامل یک‌باره متفاوت باشه.


این چه ربطی به زندگی واقعی ما داره؟

اینجا بود که Game Theory برای من از یک موضوع دانشگاهی جذاب‌تر شد.

چون وقتی با این عینک به محیط کار نگاه می‌کنیم، Gameهای زیادی می‌بینیم.

فرض کنید دو تیم Frontend و Backend روی یک محصول کار می‌کنن.

هر دو تیم Deadline دارن.

هر دو تیم می‌خوان سریع‌تر Delivery داشته باشن.

حالا Backend می‌تونه API رو طوری طراحی کنه که فقط نیاز فعلی خودش رو سریع حل کنه، یا کمی بیشتر وقت بذاره تا Contract برای Frontend هم تمیزتر و قابل استفاده‌تر باشه.

Frontend هم می‌تونه همین کار رو از سمت خودش انجام بده.

ممکنه هر تیم به‌صورت مستقل بگه:

«چرا من باید هزینه بیشتری بدم؟ تیم مقابل خودش مسئله‌ش رو حل کنه.»

و شاید از نگاه Local تصمیم کاملاً منطقی‌ای باشه.

ولی اگر هر دو تیم این Strategy رو بازی کنن، بعد از چند ماه ممکنه سیستمی داشته باشیم که Integration توش سخته، تغییرات پرهزینه‌ان و هر دو تیم از کار کردن باهاش ناراضی‌ان.

هر تیم تصمیم خودش رو Optimize کرده.

ولی هیچ‌کس کل بازی رو Optimize نکرده.


Local Optimum لزوماً Global Optimum نیست

این الگو رو می‌شه خیلی جاهای دیگه هم دید.

مثلاً Code Review.

فرض کنید PR شما برای Review میاد سمت من.

من سرم شلوغه.

می‌تونم ۳۰ دقیقه وقت بذارم، Context رو بفهمم و Review خوبی انجام بدم.

یا می‌تونم سریع یه نگاه بندازم:

LGTM ✅

در کوتاه‌مدت، Strategy دوم برای من بهتره.

۳۰ دقیقه زمان ذخیره کردم.

حالا هفته بعد PR من میاد سمت شما.

شما هم سرتون شلوغه.

و شما هم همین Strategy رو انتخاب می‌کنید.

باز هم هر کدوم به‌صورت Local تصمیم منطقی‌ای گرفتیم.

ولی بعد از چند ماه چی؟

Code Review تبدیل می‌شه به یک Ceremony.

کیفیت پایین میاد.

Knowledge Sharing کمتر می‌شه.

و چیزی که قرار بود یک Safety Net باشه، کم‌کم ارزشش رو از دست می‌ده.


«این مشکل تیم ما نیست»

یکی دیگه از جمله‌هایی که شاید همه ما در شرکت‌ها شنیده باشیم:

"Technically, this isn't our team's responsibility."

و خیلی وقت‌ها هم جمله کاملاً درسته.

Ownership مهمه.

Boundary داشتن مهمه.

قرار نیست هر تیمی هر مشکلی رو حل کنه.

ولی دوباره سؤال Game Theory اینه:

اگر همه همین Strategy رو بازی کنن، چه سیستمی ساخته می‌شه؟

فرض کنید یک مشکل بین دو سرویس، دو تیم یا دو Scope گیر کرده.

هیچ‌کس technically owner مستقیمش نیست.

هر تیم هم Incentive داره روی Roadmap خودش تمرکز کنه.

از دید تک‌تک تیم‌ها:

Not my problem.

از دید سازمان:

Very much our problem.

اینجاست که به نظرم یکی از مهم‌ترین تفاوت‌ها بین Local Optimization و System Thinking خودش رو نشون می‌ده.


ما تقریباً هیچ‌وقت یک بار بازی نمی‌کنیم

یکی از چیزهایی که بعد از خوندن بیشتر درباره Game Theory بیشتر بهش فکر کردم اینه که خیلی از تصمیم‌های ما در محیط کار، انگار با فرض One-shot Game گرفته می‌شن.

چطور این Sprint رو ببریم؟

چطور Deadline این پروژه رو رد کنیم؟

چطور این Quarter عدد خودمون رو بهتر کنیم؟

چطور این مشکل رو از Scope تیم خودمون خارج کنیم؟

ولی در واقعیت، بازی ادامه داره.

همون تیمی که امروز باهاش اختلاف داریم، سه ماه دیگه دوباره Dependency ماست.

همون Engineer که امروز کمکش نکردیم، فردا قراره PR ما رو Review کنه.

همون Technical Debt که امروز عقب انداختیم، شش ماه دیگه دوباره جلوی ما ظاهر می‌شه.

همون اعتمادی که امروز برای یک نتیجه کوتاه‌مدت خرج کردیم، ممکنه ساختنش دوباره ماه‌ها طول بکشه.

وقتی بازی تکرارشونده باشه، تعریف بهترین تصمیم هم عوض می‌شه.


Reputation خودش بخشی از بازیه

در یک تعامل تکرارشونده، فقط تصمیم امروز مهم نیست.

بقیه دارن از تصمیم‌های ما یک مدل می‌سازن.

آیا این آدم وقتی مشکلی پیش میاد کمک می‌کنه؟

آیا این تیم به Contractهاش پایبنده؟

آیا این Manager وقتی اشتباهی اتفاق می‌افته دنبال حل مسئله‌ست یا دنبال مقصر؟

آیا این Engineer وقتی نظرش رد می‌شه باز هم همکاری می‌کنه؟

آیا این شرکت به توافق‌هاش احترام می‌ذاره؟

به مرور، پاسخ این سؤال‌ها تبدیل می‌شه به Reputation.

و Reputation رفتار Playerهای دیگه نسبت به ما رو تغییر می‌ده.

پس شاید Trust فقط یک مفهوم اخلاقی یا فرهنگی نباشه.

در یک بازی تکرارشونده، می‌تونه بخشی از Strategy هم باشه.


و این منو دوباره برگردوند به A House of Dynamite

چیزی که در A House of Dynamite ذهن من رو درگیر کرد، فقط تصمیم‌های بزرگ یا فضای بحرانی فیلم نبود.

بیشتر این سؤال بود:

وقتی اطلاعات کامل نیست، زمان محدوده و نمی‌دونی Player مقابل قراره چه حرکتی انجام بده، تصمیم Rational واقعاً چیه؟

اگر منتظر اطلاعات بیشتر بمونی، شاید دیر بشه.

اگر سریع واکنش نشون بدی، شاید بر اساس یک فرض اشتباه تصمیم گرفته باشی.

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

اگر زیادی خوش‌بین باشی، شاید فرصت واکنش رو از دست بدی.

و چیزی که این مدل از تصمیم‌گیری رو سخت می‌کنه اینه که:

تصمیم شما فقط پاسخ به بازی نیست؛ خودش بازی رو تغییر می‌ده.

Player مقابل تصمیم شما رو می‌بینه و واکنش نشون می‌ده.

بعد شما به واکنش اون جواب می‌دید.

و همین چرخه ادامه پیدا می‌کنه.


شاید سؤال اشتباهی می‌پرسیم

خیلی وقت‌ها وقتی می‌خوایم تصمیم بگیریم، سؤال اصلی‌مون اینه:

«بهترین تصمیمی که من می‌تونم بگیرم چیه؟»

و این سؤال بدی نیست.

ولی Game Theory باعث شد من بیشتر به یک سؤال دیگه فکر کنم:

«اگر همه Playerهای این بازی به Incentiveهاشون پاسخ بدن، این تصمیم در نهایت چه سیستمی می‌سازه؟»

چون چیزی که برای من بهترین تصمیمه، ممکنه برای کل سیستم بهترین تصمیم نباشه.

چیزی که امروز بهینه‌ست، ممکنه در یک بازی تکرارشونده Strategy بدی باشه.

و چیزی که در کوتاه‌مدت Cost داره — مثل همکاری، ساختن Trust یا کمک به تیم دیگه — ممکنه در بلندمدت نتیجه کاملاً متفاوتی بسازه.

این به معنی همیشه همکاری کردن نیست.

به معنی نادیده گرفتن منافع خودمون هم نیست.

و قطعاً به این معنی نیست که برای هر تصمیمی باید بشینیم Payoff Matrix بکشیم :)

بیشتر از هر چیزی، برای من یک Mental Modelـه.

یک راه متفاوت برای نگاه کردن به تصمیم‌ها.


این تصمیم چه بازی‌ای می‌سازه؟

هرچی بیشتر درباره Game Theory خوندم، کمتر احساس کردم داره بهم می‌گه:

«تصمیم درست اینه.»

و بیشتر احساس کردم داره کمک می‌کنه سؤال‌های بهتری بپرسم.

Playerهای این بازی کیا هستن؟

هر کدوم چه Incentiveای دارن؟

اطلاعات بین ما چطور پخش شده؟

آیا این یک تعامل یک‌باره‌ست یا قراره بارها تکرار بشه؟

اگر من این حرکت رو انجام بدم، رفتار Playerهای دیگه چطور تغییر می‌کنه؟

آیا داریم Local Optimum رو با بهترین نتیجه برای کل سیستم اشتباه می‌گیریم؟

و شاید مهم‌تر از همه:

داریم چه نوع بازی‌ای برای دفعات بعد می‌سازیم؟

شاید Game Theory به ما نگه بهترین تصمیم چیه.

ولی حداقل یک چیز مهم رو یادآوری می‌کنه:

خیلی از تصمیم‌های زندگی رو نمی‌شه در خلأ Optimize کرد.

چون ما تقریباً هیچ‌وقت تنها بازی نمی‌کنیم.

تصمیم ما رفتار بقیه رو تغییر می‌ده.

رفتار بقیه تصمیم بعدی ما رو تغییر می‌ده.

و چیزی که امروز کاملاً منطقی به نظر می‌رسه، ممکنه در یک بازی تکرارشونده نتیجه‌ای بسازه که هیچ‌کدوم از Playerها واقعاً نمی‌خواستن.

برای همین این روزها، کنار سؤال:

«بهترین تصمیم من چیه؟»

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

«این تصمیم، چه بازی‌ای بین من و بقیه می‌سازه؟»

محیط کارgame theoryانتخابcode review
۳
۰
شایان میرزایی
شایان میرزایی
Frontend Lead و مهندس ارشد نرم‌افزار در اسنپ‌فود. اینجا از چالش‌های واقعی ساخت محصول و کار با تیم‌ها می‌نویسم؛ از معماری فرانت‌اند و ابزارهای AI تا رهبری مهندسی و مدل‌های ذهنی تصمیم‌گیری.
شاید از این پست‌ها خوشتان بیاید