یکی از اشتباه ترین تصور هایی که اوایل مسیر داشتم این بود که فکر میکردم هر مسئلهای باید یک راه حل درست داشته باشد.
یک جواب.
یک تصمیم صحیح.
یک انتخاب واضح.
اما هرچه بیشتر در پروژه های واقعی کار کردم، بیشتر فهمیدم که بسیاری از تصمیم های مهندسی این گونه نیستند.
مثلاً:
آیا باید Monolith بمانیم یا به سمت Microservice برویم؟
آیا باید Cache اضافه کنیم؟
آیا باید سیستم را Rewrite کنیم؟
آیا باید این Feature را Generic طراحی کنیم؟
جالب است که برای همه این سوال ها میتوان مثال هایی پیدا کرد که پاسخ «بله» درست باشد.
و مثال هایی که پاسخ «خیر» درست باشد.
همان جا بود که فهمیدم بخش بزرگی از مهندسی نرم افزار، پیدا کردن پاسخ درست نیست.فهمیدن سوال درست است.
چون خیلی وقت ها قبل از اینکه راه حل اشتباهی انتخاب کنیم،
در حال حل کردن مسئله اشتباهی هستیم.
ساعت ها روی Performance کار میکنیم، در حالی که گلوگاه اصلی جای دیگری است.
معماری را پیچیده میکنیم، در حالی که مشکل واقعی فرآیند های تیم است.
سیستم را Scale میکنیم، در حالی که مسئله از یک Query اشتباه شروع شده است.
شاید به همین دلیل است که مهندسان باتجربه، معمولاً زودتر از بقیه راه حل ارائه نمیدهند.
آنها مدت بیشتری روی فهمیدن مسئله وقت میگذارند.
چون میدانند انتخاب بهترین راه حل برای یک مسئله اشتباه،
هنوز هم یک اشتباه است.
Post #687
369