tech-afternoon
1.27K subscribers
176 photos
6 videos
6 files
172 links
تِک‌افترنون، رویدادی گاه‌به‌گاه است با موضوعات حول معماری و توسعه نرم‌افزار، این کانال هم برای اشتراک اخبار، آموزش، نکاتی حول مهندسی نرم‌افزار، دیتابیس‌، تکنولوژی و مدیریت تولید محصولات نر‌م‌افزاری خواهد بود.
youtube.com/@AminTechTalks/videos
امین مصباحی
Download Telegram
♻️ فیدبک، راه‌حل بهبود و توسعه مداوم...
فیدبک، یک فرهنگه، که برای ایجادش باید تلاش کرد، ممارست داشت و رهاش نکرد. باید مستندش کرد، آموزشش دارد، به عنوان ارزش و روش نهادینه‌اش کرد و از روز آنبوردینگ روش تکیه کرد؛ تا بتونه در میان/بلند مدت میوه بده.

🥕🪓 فیدبک: فراتر از هویج و چماق

خیلی از ما فیدبک رو با «نقد کردن» یا «تشویق کردن» اشتباه می‌گیریم. فکر می‌کنیم ابزاریه که الزاما مدیر از موضوع بالا نسبت به کارمند استفاده می‌کنه تا بتونه با تشویق و تنبیه یا ملقمه‌ای از هر دو وادارش کنه تا رفتار و کارآمدی دلخواهش رو دنبال کنه! (رویکرد هویج و چماق).

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

چرا فیدبک‌های "حسی" کار نمی‌کنند؟
همه ما جمله‌هایی مثل «کارت عالی بود» یا «باید بیشتر دقت کنی» را شنیدیم. این‌ها فیدبک نیستن؛ این‌ها نظرات گُنگ هستند! فیدبک مبهم نه تنها باعث بهبود یا اصلاح رفتارها نمی‌شه، بلکه می‌تونه باعث سوءتفاهم و گارد گرفتن طرف مقابل بشه. برای حل این مشکل، ما به مدل‌های ساختاریافته نیاز داریم تا بتونیم قبل از ارائه بازخورد محتوا رو بریزیم توی یک قالب استاندارد، ببینیم آیا قالب رو پر می‌کنه؟ یا باید ازش کم و زیاد کنیم!

۱. مدل SBI: شفافیت به جای قضاوت
مدل SBI (مخفف Situation-Behavior-Impact) یکی از بهترین روش‌ها برای حذف قضاوت شخصی و تمرکز روی واقعیت‌هاست.

- موقعیت (Situation): دقیقاً بگید این عمل کِی و کجا رخ داده. (عمل یا اتفاق می‌تونه مثبت یا منفی باشه)
- رفتار (Behavior): دقیقاً چه رفتاری دیدید؟ (بدون استفاده از صفاتی مثل تنبل، بی‌دقت، عالی، دقیق و...).
- اثر (Impact): آن رفتار چه تاثیری روی شما، تیم یا پروژه گذاشته.

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

۲. مدل EEC: چرخه یادگیری و اصلاح
مدل EEC (مخفف Example-Effect-Change/Continue) هم برای بازخورد اصلاحی (منفی) و هم برای بازخورد تقویتی (مثبت) خوبه.

- مثال (Example): یک مثال مشخص از رفتار رو بیان کنید.
- اثر (Effect): نتیجه رو شفاف بیان کنین.
- تغییر/ادامه (Change/Continue): اگر بازخورد منفیه، چه تغییری انتظار دارید؟ اگر مثبته، به ادامه دادنش تشویق کنید.

مثال برای ادامه (Continue): «گزارشی که دیروز فرستادی (مثال)، خیلی داده‌های دقیقی داشت و باعث شد مشتری قانع بشه (اثر). لطفاً همین ساختار رو برای گزارش‌های بعدی هم حفظ کن (ادامه).»

⚠️خطر » سوگیری‌های ناخودآگاه در کمین ما هستن! (Unconscious Biases)
یه فیدبک رو می‌شه ریخت توی قالب SBI یا EEC یا هر مدل دیگه‌ای. ولی این کافیه؟ نه. باید حواسمون باشه که فیدبک دادن می‌تونه به سوگیری‌های ناخودآکاه ما یا Unconscious Biases آلوده بشه و از مسیر سازنده بودن خارج! ۳ دشمن نامرئی فیدبک سازنده:

۱. سوگیری شباهت (Similarity Bias)
ما ناخودآگاه با کسانی که شبیه به ما فکر می‌کنن، لباس می‌پوشن یا پیش‌زمینه مشابهی دارن، راحت‌تریم. توی فیدبک، این باعث می‌شه با افراد «شبیه به خودمون» مهربون‌تر باشیم و خطاهاشون را نادیده بگیریم، در حالی که نسبت به بقیه سخت‌گیرتریم. این سمِ تنوع و رشد تیمه.

۲. سوگیری تأییدی (Confirmation Bias)
اگر من باور داشته باشم که «فلانی کارمند بی‌دقتیه»، مغز من فقط لحظاتی رو ثبت می‌کنه که اون اشتباه کرده و تمام کارهای دقیقش رو نادیده می‌گیره تا باور قبلی‌ام تأیید بشه! فیدبک بر اساس این سوگیری، فقط تکرار مکرراتِ ذهن فیدبک‌دهنده است؛ نه واقعیتِ عملکرد فیدبک‌گیرنده.

۳. سوگیریِ رویدادهای اخیر (Recency Bias)
این آفتِ ارزیابی‌های پایان سال (Year-end reviews) است. ممکنه همکار شما ۱۰ ماه عالی کار کرده باشه، اما چون دو هفته پیش یک اشتباه کرده، تمام ارزیابی سالانه‌اش تحت‌الشعاع اون خطای اخیر قرار می‌گیره. یا برعکس؛ یک سال کم‌کاری کرده ولی با یک ماه تلاشِ دقیقه نودی، همه‌چیز پوشیده می‌شه!

پادزهر سوگیری چیه؟ ساختار به جای احساس
یکی از دلایل پیدایش مدل‌هایی مثل SBI یا EEC همینه، که جلو سوگیری‌ها گرفته بشه. باید با داده صحبت کنیم، پس باید داده‌ها رو ثبت کنیم و مغزمون رو مجبور کنیم از قضاوت حسی فاصله بگیره و به فکت‌ها نگاه کنه.

💬 میشه ساعت‌ها در مورد شیوه‌های بیان فیدبک، اشتباهات رایج، عکس‌العمل در قبال سوءبرداشت‌ها و شرایط پیچیده‌ی تقابلی صحبت کرد. خوشحال می‌شم تجربیات و نظراتتون رو بشنوم 😊
Please open Telegram to view this post
VIEW IN TELEGRAM
10👍54
چک‌لیست پیشنهادی جامع پایان سال برای تیم‌های نرم‌افزاری

🧐 بخش اول: مرور و ارزیابی سال گذشته (Retrospective)

1️⃣ محصول و deliverableها:
- مقایسه اهداف تعیین‌شده با نتایج واقعی (roadmap vs. delivery)
- بررسی کیفیت تحویل‌ها: باگ‌های پرتکرار، incident های مهم، downtime ها
- تحلیل feature هایی که موفق بودن در مقایسه با اون‌هایی که استفاده نشدن (impact کمی داشتند)
- مرور feedback تیم، کاربرها و مشتریان در طول سال

2️⃣بدهی فنی (Technical Debt)
- فهرست بدهی‌های حل‌شده: چه چیزهایی refactor شد؟ کدوم dependency های قدیمی آپدیت شدن؟
- بدهی‌های باقی‌مونده: اولویت‌بندی بر اساس تأثیر و ریسک
بدهی‌های جدید: چرا اضافه شدند؟ آیا قابل اجتناب بودن؟
- تخمین زمان لازم برای پرداخت بدهی‌های critical در Q1 سال پیش‌ِ‌رو

3️⃣عملکرد تیم
- بررسی velocity تیم در sprint ها/iteration ها
- تحلیل bottleneck ها و موانع اصلی
- شناسایی skill gap های تیم
- مرور میزان رضایت و engagement تیم (اگر نظرسنجی کردید)

4️⃣ زیرساخت و DevOps
- مرور incident های سال و زمان میانگین بازیابی (MTTR)
- بررسی هزینه‌های cloud/infrastructure، آیا optimization لازمه؟
- وضعیت CI/CD pipeline: سرعت build، deploy، test coverage
- مرور امنیت: آسیب‌پذیری‌های شناسایی‌شده و رفع‌شده


📡 بخش دوم: تحلیل ترندها و آینده‌نگری

رصد ترندهای ۲۰۲۶
- مطالعه حداقل ۳ منبع معتبر مثل Gartner, Deloitte, ThoughtWorks Tech Radar, Pluralsight Tech Trends
- بررسی roadmap پروژه‌های کدباز مرتبط با stack شما
- شناسایی ۳-۵ ترند مرتبط با حوزه کاری شما
- ارزیابی: کدوم ترندها به اهداف کسب‌وکار/محصول شما کمک می‌کنن؟

بررسی رقبا و صنعت
- رقبای اصلی شما چه feature های جدیدی اضافه کردن؟
- از مسیر آینده استک‌تکنولوژی، لایبری‌ها و... مورد استفاده‌تون آگاهید؟
- چه تکنولوژی‌های جدیدی توی صنعت شما در حال adoption هستن؟
- استانداردها و regulation های جدید رو در شناسایی کردید؟


بخش سوم: برنامه‌ریزی سال جدید

اهداف استراتژیک (Strategic Goals)
- تعریف ۳-۵ هدف کلیدی سال (SMART goals)
- اولویت‌بندی: چه چیزی باید بشود و چه چیزی خوبه که بشود
- تخصیص بودجه و منابع به اهداف
- تعریف معیارهای موفقیت برای هر هدف (KPI ها)

تبیین Roadmap فنی
- تمرکز اصلی شما در Q1 چیه؟ (معمولاً stability + پرداخت بدهی فنی)
- تمرکز آتی یعنی Q2-Q4: اهداف کلیدی و milestone ها
- لیست تکنولوژی‌هایی که می‌خواهید adopt کنین (با justification)
- برنامه آموزش تیم برای مهارت‌های جدید

مدیریت ریسک
- شناسایی ریسک‌های فنی و کسب‌وکاری سال آینده
- برای هر ریسک: احتمال، تأثیر، و راهکار کاهش
- برنامه backup برای سناریوهای بدبینانه (team churn، budget cut و حوادث غیرمترقبه یا شرایط دشوارتر اقتصادی و...)


♻️ بخش چهارم: چرخه بهبود مستمر

بازنگری سه‌ماهه (Quarterly Reviews)

- پایان Q1 (اسفند ۱۴۰۴):
آیا اهداف Q1 محقق شد؟
آیا roadmap نیاز به تعدیل داره؟


- پایان Q2 (تیر ۱۴۰۵):
بررسی نیمه‌سال
نیاز pivot یا persevere؟

- پایان Q3 (مهر ۱۴۰۵):
آمادگی برای push نهایی سال


- پایان Q4 (دی ۱۴۰۵):
چرخه جدید retrospective

متریک‌های کلیدی برای tracking
- ایجاد dashboard های پایش پیشرفت
- تعیین cadence بررسی متریک‌ها (هفتگی/ماهانه)
- تعیین مسئول جمع‌آوری و گزارش هر متریک

💡 بخش پنجم: بهبود فرآیندها

فرآیند توسعه
- آیا Agile/Scrum/CMMI فعلی کارآمده؟ نیاز به تغییر داره؟
- وضعیت code review: کیفیت، سرعت، یادگیری تیم
- وضعیت testing strategy: manual و automated، test coverage مطلوبه؟

ارتباطات و مستندات
- وضعیت documentation: آیا به‌روزه؟ آیا accessible است؟ ساختار مناسب داره؟
- کیفیت ارتباط بین تیم‌ها (dev, product, design, QA)
- برنامه برای بهبود knowledge sharing

بررسی Developer Experience
- آیا onboarding برای اعضای جدید ساده است؟
- زمان setup محیط توسعه؟
- ابزارهای مورد نیاز تیم فراهمه؟

🎯 بخش ششم: Action Items

فوری (تا پایان دی‌ماه)
- برگزاری جلسه retrospective تیم
- نهایی کردن roadmap Q1
- به‌روزرسانی dependency های critical

کوتاه‌مدت (Q1 سال جدید)
- اجرای برنامه پرداخت بدهی فنی
- شروع training برای تکنولوژی‌های جدید
- پیاده‌سازی بهبودهای فرآیندی

بلندمدت (سال ۲۰۲۶)
- رصد و tracking پیشرفت نسبت به اهداف سالانه
- بازنگری و تطبیق با تغییرات بازار/صنعت

📌 مهم:

✔️ این چک‌لیست یک پیشنهاده، ولی چک‌لیست خودتون رو با تیمتون مرور کنید؛ مالکیت جمعی بسازید
✔️ واقع‌بین باشید؛ overcommitment دشمن اصلی موفقیته (سنگ بزرگ نشونه‌ی نزدنه)
✔️ مستند کنید، یک سال دیگه به این نوت‌ها نیاز خواهید داشت
✔️ انعطاف‌پذیر باشید، برنامه وحی منزل نیست، اما بدون برنامه هم قابل قبول نیست
Please open Telegram to view this post
VIEW IN TELEGRAM
7👍411🙏1
tech-afternoon
بزرگ‌ترین چالش‌ اکوسیستم نرم‌افزار ایران به نظر شما کدوم گزینه است؟ (+ کامنت کنید)
در مورد این نظرسنجی، من گزینه‌هایی رو انتخاب کردم که به نحوی به هم مرتبط باشن و انتخاب «بزرگ‌ترین» چالش رو کمی به سمت بیان نحوه‌ی تحلیل مسئولیت‌ها ببره 😅

چهار عامل بین گزینه‌ها بود که ساده‌شده‌اش می‌شه:
- کارشناس
- مدیر
- حاکم
- محیط

حاکم فضایی ایجاد کرده که محیط غیر رقابتی، بدون چشم‌انداز و ثبات، جدا افتاده از جهان؛ مدیرها رو به حال خودشون رها کنه که نه در اثر تعامل با جهان آموزش ببینن، نه نیازی به پرورش کارشناس و جانشین‌پروری حس کنن؛ نه لزومی به برنامه‌ریزی میان|بلند مدت ببینن، نه احساس خطری برای سازمان‌سازی غیرمولد و تولید محصولات بی‌کیفیت!

تا اینجا می‌بینیم که کلی معضل به صورت زنجیره‌ای، و متصل به‌هم دارن شرایط رو دشوار می‌کنن؛ همگی هم صحیح هستن.

💡 ولی رکن چهارم که توی توصیف بالا از هر سه عامل متأثره چی؟

یعنی کارشناسی که مدیر نالایق، و سازمانی که ساختار نامناسب داره رو تجربه می‌کنه؛ پرورش داده نمی‌شه تا مدیر خوبی بشه؛ در فضایی تنفس می‌کنه که حتی عبارت «تنفس» با توجه به آلودگی هوا طنزی تلخ به شمار می‌ره، هر روز شاهد بی‌ارزش‌تر شدن دستمزدش می‌شه، برای ساده‌ترین دسترسی به اینترنت باید صد جور سختی رو طی کنه و در یک فضای غیررقابتی هر چی تولید کنه، خریدار داره!

قضاوت من با ۱۱۹ نفری که بزرگ‌ترین چالش رو خارج از کارشناس دیدن، همسو است؛ ولی با یک تفاوت مهم!

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

بخشی از بدنه کارشناسی » وارد لایه مدیریتی می‌شن » بخشی از همین مدیران وارد بخش حاکمیتی می‌شن و محیط رو می‌سازن!
حالا سوال اینه: چرا کارشناسان ضعیف به مدیران ضعیف تبدیل می‌شن؟

اینجا دو تا سناریو داریم:

سناریو ۱، خوش‌بینانه: کارشناس قوی وارد مدیریت می‌شه ولی سیستم اون رو می‌بلعه. فشارهای سازمانی، فقدان حمایت، سیاست‌ورزی، و ساختارهای فاسد مجبورش می‌کنن یا سازش کنه یا بره. در این صورت مشکل ۱۰۰٪ ساختاری‌ست و ۹۴٪ نظرسنجی کاملاً درست.

سناریو ۲، واقع‌بینانه: بخش قابل توجهی از کارشناسان حتی قبل از ورود به لایه مدیریت، فاقد پیش‌نیازهای لازم هستن، نه به دلیل تقصیر شخصی، بلکه به این دلیل که همون سیستم معیوب اون‌ها رو پرورش داده.

نکته اساسی اینه که وقتی می‌گم کارشناس چالشه، منظورم سرزنش کردن قربانی نیست. کارشناس هم قربانی این سیستمه، هم بدون اراده و آگاهی، بازتولیدکننده اون!

چرا؟
۱. سیستم آموزشی فاجعه است » دانشجو با مهارت‌های تاریخ‌گذشته یا ناکارآمد فارغ‌التحصیل می‌شه
۲. فرصت یادگیری واقعی وجود نداره » شرکت‌ها روی رشد مهارت‌‌ها سرمایه‌گذاری نمی‌کنن
۳. شایسته‌سالاری نیست » کارشناس خوب پاداش نمی‌بینه، پس انگیزه از بین می‌ره
۴. فقر اقتصادی » کارشناس مجبوره توی حالت تلاش برای بقا کار کنه، نه حالت رشد

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

پس چرا می‌گم کارشناس چالش بزرگه؟

نه به این معنی که "مقصر" است؛ بلکه به این معنی که شکست حلقه‌ی معیوب باید از همین نقطه شروع بشه، حتی اگر سخت‌ترین نقطه باشه.

چرا؟
۱. منتظر نشستن برای اصلاح حاکمیت = بی‌نهایت
اگر بخواهیم حاکمیت عوض بشه تا محیط بهتر بشه تا مدیران بهتر بشن تا کارشناسان رشد کنن، این ۵۰ سال طول می‌کشه (اگه اتفاق بیفته).

۲. کارشناس تنها لایه‌ایه که می‌تونه از پایین فشار بیاره
حاکمیت و مدیریت ضعیف وقتی می‌ترسن که جایگزین‌های قوی‌تر ببینن. اگر ۱۰٪ کارشناسان exceptional باشن، فشار ایجاد می‌کنن.

۳. در بخش خصوصی، عاملیت فردی واقعاً کار می‌کنه
دیوار، دیجیکالا، کافه‌بازار و.. همه توسط افرادی ساخته شدن که برای دریافت مجوز معصل نبودن! بله، شانس و زمانه دخیل بود، ولی اگر «قابلیت» نبود، هیچ‌کدوم موفق نمی‌شدن.
این به معنی گذاشتن تمام بار روی دوش کارشناس نیست. ما باید بین تشخیص و تجویز فرق بگذاریم:
تشخیص: لایه کارشناسی گلوگاه بحرانیه
تجویز: نه اینکه "کارشناس باید فقط تلاش کنه"، بلکه اینکه:

- باید یادگیری جمعی ایجاد شه
- و peer accountability شکل بگیره (اشتراک دانش و تجربه واقعی)
- استانداردهای خودِ ما بالا بره (قبول نکردن شرایط زیر خط قرمز)
- بهترین‌ها صدای خودشون رو بلند کنن و الگو باشن

این کافیه؟ قطعاً نه.
بدون این، چیز دیگه‌ای کافیه؟ باز هم نه.

در متن سوال نظرسنجی نوشتم بزرگ‌ترین چالش، و نه مقصرترین؛ چون چالش یعنی سخت‌ترین مانع برای عبور به آینده بهتر؛ حتی اگر ریشه اون در جای دیگه‌ای باشه.

نظر و تحلیل شما چیه؟
Please open Telegram to view this post
VIEW IN TELEGRAM
👍54💯21
شماره ۱۲۰ از The InfoQ eMag (دسامبر) مقالات جالبی داشت (بعد از چند شماره که به تکرار افتاده بود، این شماره دوباره جون گرفت)

مطالبی که من دوست داشتم از این شماره:

Holistic Engineering: Organic Problem
Solving for Complex Evolving Systems

Empowering Teams:
Decentralizing Architectural
Decision-Making

فایل PDF رو در کامنت می‌گذارم تا اگر دوست داشتید دانلود و مطالعه کنید.
👍75🤓21
پروژه Oh My Posh Visual Configurator

اگر شما هم بیشتر ساعات روز مستقیم یا به در حین کار با ترمینال کار می‌کنید (توی ادیتور یا IDE یا مستقل) احتمالا از ابزارهایی مثل oh my posh یا oh my zsh یا ... استفاده می‌کنید تا کار از طریق محیط ترمینال براتون سریع‌تر، و البته کم خطاتر بشه.

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

حالا جیمز مونته‌ماگنو که لید تیم ابزارهای توسعه‌دهنده‌های مایکروسافته؛ یه محیط گرافیکی برای ساختن کانفیگ Oh my posh ساخته که راحت‌تر تنظیمات دلخواه رو بسازیم. اگر دوست داشتید تست کنید.

پروژه oh my posh یه ابزار کدباز است که محیط ترمینال رو غنی‌ و کارامد می‌کنه (مک و لینوکس و ویندوز )

پست وبلاگ توسعه‌دهنده در مورد configurator
🔥8👍322
⚙️ آمار و میزان محبوبیت مطالب کانال + دسترسی به ویدیو و پادکست

⭐️ محبوب‌ترین مطالب کانال تا امروز
⬇️ خروجی وب مطالب کانال
(تولید شده با استفاده از TeleScribe)

📱ویدیوهای کانال یوتیوب
🎙 پادکست
Please open Telegram to view this post
VIEW IN TELEGRAM
123🙏1
به خاطر میخی، نعلی افتاد
به خاطر نعلی، اسبی افتاد
به خاطر اسبی، سواری افتاد
به خاطر سواری، جنگی شکست خورد
به خاطر شکستی، مملکتی نابود شد
و همه این ها به خاطر کسی بود که میخ را خوب نکوبیده بود

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

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

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

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

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

و دوستانی که علاقه دارن خودشون تحقیق کنن شاید این کلیدواژه‌ها بد نباشن:

- Segregation of Duties (SoD)
- End-to-End Traceability
- Audit Logging & Observability
- Data Quality Management (DQM)
- Master Data Management (MDM)
- Reference Data Management
- Single Source of Truth (SSOT)

و همیشه مهندس‌ها با ابزارها و روش‌های فنی جلو فساد رو نمی‌گیرن؛ بلکه با پیاده‌سازی روش‌های به ظاهر غیر نرم‌افزاری در دل نرم‌افزارها جلو فساد رو می‌گیرن؛ کلیدواژه‌های کمکی:
- Social visibility
- Self-regulation
- Nudge theory (تلنگرهای رفتاری)
- Accountability Mechanisms
- Awareness & Participation
- Principal-Agent Theory
- Theory of Change (ToC)
- Social Norms Theory
17👎7👍4💯1😐1
وقتی مهندسی شریک رنج می‌شه

در حالی این مطلب رو می‌نویسم که حدود یک هفته است که ارتباط ایران با اینترنت قطع شده و اونچه که به بیرون میاد ترکیب آشفته‌ای از خبر و شایعه است؛ اخباری که در خوش‌بینانه‌ترین حالتش، چیزی جز صدای درد و رنج و فقدان نیست…
حتی در مورد انتشار این مطلب مردد هستم...
ادامه
💔23
بچه‌ها قرار نیست همه برنامه‌نویس بشن، ولی باید مسئله حل کنن!

مدت‌ها بود که دوست داشتم در مورد دلایل اهمیت یادگیری برنامه‌نویسی برای کودکان بنویسم؛ اینکه هیچ ربطی به شغل آینده‌ی کودک نداره و مهارت‌های پشتش باید شکل بگیره که اون‌ها مهم هستن. و فعلا برنامه‌نویسی یکی از بهترین روش‌ها برای یادگیری اون مهارت‌ها به شمار میان.

این روزها که وضعیت ایران رو می‌بینم تصور می‌کنم راه نجاتی جز نسل بعدی برای آینده ایران نیست؛ لذا چند خطی رو در این مورد نوشتم که اگر علاقه‌مند بودید بخونید و نظرتون رو بگید.

لینک مطلب
14👍4👏4💯1
سلام؛

اگر امروز چند میلیون به سادگی فایل‌هاشون رو روی اینترنت آپلود می‌کنن و از هر نقطه‌ی دنیا با یه URL ساده بهش دسترسی دارن، بخش بزرگی از این سادگی مدیون معماری‌ایه که Amazon S3 حدود دو دهه پیش طراحی کرد.

تقریباً اکثر آبجکت‌استوریج‌های مطرح دنیا، چه از سمت Amazon، Microsoft، Google و چه نمونه‌های داخلی مثل آروان یا ستون، با API سازگار با S3 کار می‌کنن یا عملاً از همون مدل الهام گرفته‌ان.

ایده ساده ولی عمیق:
به جای فایل‌سیستم سنتی با سلسله‌مراتب پیچیده، یک مدل object-based با namespace تخت، شناسه یکتا، متادیتا، و از پایه و اساس طراحی‌شده برای مقیاس‌پذیری افقی. نتیجه؟ ذخیره‌سازی massively scalable با durability بالا و هزینه منطقی.

پروژه‌های متن‌باز مثل Ceph، MinIO و RustFS هم دقیقاً توی همین فضا رشد کردن و اکوسیستم S3-compatible رو تقویت کردن. این یعنی S3 فقط یک سرویس نبود؛ بلکه اینقدر خوب بود که تبدیل به یک قرارداد معماری شد.

اگر به طراحی سیستم‌های توزیع‌شده، trade-off بین consistency و availability، یا تصمیم‌های اولیه‌ای که بعدها تبدیل به استاندارد صنعت شدند علاقه دارین، این گفت‌وگو توی کانال The Pragmatic Engineer از زاویه مهندسی و معماری نکات ارزشمندی داره. مصاحبه دقیق و فنی با معاون تکنولوژی AWS، خانم مای‌لان تامسون.

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

📢 در ضمن برای انتخاب موضوع مطالب آتی کانال خوشحال می‌شم پیشنهادهاتون رو کامنت کنید؛ اگر چیزی در موردشون بدونم یا تجربه‌ای داشته باشم، حتمن در اولویت خواهند بود 😊
189💯2👍1
tech-afternoon
بچه‌ها قرار نیست همه برنامه‌نویس بشن، ولی باید مسئله حل کنن! مدت‌ها بود که دوست داشتم در مورد دلایل اهمیت یادگیری برنامه‌نویسی برای کودکان بنویسم؛ اینکه هیچ ربطی به شغل آینده‌ی کودک نداره و مهارت‌های پشتش باید شکل بگیره که اون‌ها مهم هستن. و فعلا برنامه‌نویسی…
تفکر محاسباتی در بزرگسالی؛ بازسازی ظرفیت تحلیل و حل مسئله!

این مطلب، در ادامه یادداشتی است که در مورد مهارت «حل مسئله» برای کودکان نوشته بودم؛ منتها برای بزرگسال‌ها.

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

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

و شاید هر کسی که به این موضوع علاقه‌مند باشه...

مثل همیشه خوشحال می‌شم نظر یا تجربه‌تون رو بدونم 😊
103
در باب اهمیت Traceability

گاهی فکر می‌کنیم «سیستم ما که دو تا سرویس بیشتر نیست» یا «فعلا مونولیت هستیم، پس traceability فعلا اهمیتی نداره و هر وقت بزرگ‌تر شد درستش می‌کنیم». ولی واقعیت اینه که زنجیره‌ی callها از همون روز اول وجود داره. حتی اگر فقط یک API به یک دیتابیس وصل باشه. مسئله این نیست که microservice داریم یا نه.
مسئله اینه که وقتی یک درخواست وارد سیستم می‌شه، آیا می‌تونیم مسیرش رو از ابتدا تا انتها ببینیم یا نه؟

حالا Traceability یعنی چه؟

یعنی بتونیم به این سوال ساده جواب بدهیم: این درخواست دقیقا از کجا اومده، از چه سرویس‌هایی عبور کرده، کجا کند شده، و چرا خطا داده؟
توی معماری microservice این موضوع حیاتیه، چون زنجیره‌ی callها طولانی و توزیع‌شده است. ولی حتی توی یک سیستم کوچک هم اگر این قابلیت رو نداشته باشیم، debugging زمان‌بر، و به حدس و گمان تبدیل می‌شه.

چرا حتی برای سیستم‌های کوچک هم مهمه؟
برخی تصور می‌کنن Distributed Tracing مخصوص سیستم‌های بزرگه. اما به تجربه:
- حتی یک سیستم سه‌لایه ساده هم بدون trace خوب، در زمان بروز مشکل، می‌تونه تبدیل به تاریکی مطلق بشه.
- وقتی یک feature ساده کند می‌شه، اگر trace نداشته باشی، شروع می‌کنی لاگ‌ها رو grep کردن و فرضیه ساختن.
- وقتی فرد جدیدی به تیم اضافه می‌شه، داشتن trace خوب، عملا بهترین مستند معماری زنده است.

پس Traceability باعث می‌شه:
- فرایند debugging از «حدس» به «مشاهده» تبدیل بشه
- به مرور blame culture توی تیم کمتر بشه، چون مسیر واقعی قابل دیدنه
- عملا bottleneckها خیلی سریع‌تر شناسایی بشن
- وابستگی‌ها شفاف باشن

سه ستون اصلی Traceability
۱: اصل Context Propagation
یعنی باید context هر درخواست همراهش حرکت کنه. Trace ID و Span ID باید از سرویس A به B و C منتقل بشن. و اگر این زنجیره قطع بشه، عملا trace بی‌ارزش می‌شه. استاندارد رایج امروز: W3C Trace Context. و این یعنی هدرهای استاندارد برای انتقال trace بین سرویس‌ها.

۲: اصل Correlation بین Log و Trace
داشتن trace بدون لاگ بی‌فایده است. و داشتن لاگ بدون trace هم ناقصه. هر log مهم باید شامل:
trace_id
span_id

باشه تا بتونی از یک error log مستقیم بپری روی trace کامل اون درخواست. Structured logging اینجا حیاتیه (گرچه همه جا مهمه نه فقط توی traceability و متن آزاد و غیرساخت‌یافته توی سیستم‌های جدی قابل دفاع نیست.)

۳: طراحی درست Spanها
نام spanها باید پایدار و کم‌کاردینال باشه. به جای اینکه IDهای متغیر رو داخل نام span بگذاریم، اون‌ها رو به صورت attribute باید ثبت کرد.

مثلا:
درست: HTTP POST /employee/{id}
غلط: HTTP POST /employee/1037685
اگر این موضوع رعایت نشه، هزینه و performance ابزارهای observability صدمه می‌بینه.

توی سیستم‌های Async و Message-based
خیلی وقت‌ها فکر می‌کنیم tracing فقط مربوط به HTTP است. ولی توی سیستم‌های event-driven اگر context رو داخل header پیام منتقل نکنی، زنجیره عملا قطع می‌شه. برای publish و consume هم برای هر پیام باید span جداگانه وجود داشته باشه. وگرنه نمی‌فهمی این job واقعا نتیجه‌ی کدوم درخواست بوده.

چند Best Practice عملی
- از یک استاندارد واحد استفاده کن. OpenTelemetry امروز انتخاب منطقی‌ایه.
- سعی کنید sampling هوشمند داشته باشید. همه چیز رو صددرصد نگه داشتن، راهکار نیست.
- به هیچ وجه PII رو داخل trace و log نریزید. اگر لازمه، hash یا mask کنید (به صورت کلی complience رو جدی بگیرید).
- حتمن naming convention مشخص برای سرویس‌ها و spanها داشته باشید.
- موضوع dependencyهای بیرونی مثل DB و external APIها رو حتما داخل trace بیارید.
- فقط errorها رو log نکنید، داخل span هم record کنید.

موضوع Traceability فقط ابزار نیست، فرهنگه! اگر تیم به این موضوع باور نداشته باشه، ابزار به تنهایی کمکی نمی‌کنه. باید در code reviewها به propagation دقت بشه. باید logging استاندارد enforce بشه. و باید observability contract بین تیم‌ها تعریف بشه (توی سازمان‌های بزرگ‌تر وظیفه تیم اینتگریشن یا پلتفرم است)

جمع‌بندی: داستان Traceability چیزی نیست که «وقتی بزرگ شدیم» اضافه کنیم. این یکی از اون قابلیت‌هاییه که اگر از روز اول درست پیاده بشه:
- هزینه‌ی debugging به شدت کاهش پیدا می‌کنه
- معماری شفاف‌تر می‌شه
- رشد سیستم قابل کنترل‌تر می‌شه
- و در زمان بحران، تیم به جای سردرگمی، تصویر واضحی از واقعیت داره

سیستم بدون trace مثل شهریه که دوربین کنترل ترافیک نداره. شاید در روزهای آروم و تعطیلات مشکلی حس نشه. ولی در اولین روز پرکار و شلوغ، تازه می‌فهمی چی کم بوده.

💬 تجربه شما چی بوده؟
Please open Telegram to view this post
VIEW IN TELEGRAM
👍854
🪞روز مهندس، و داستان جناب هانس‌کریستین‌اندرسون که هنوز تمام نشده!

قرن ۱۹ میلادی، نویسنده سرشناس دانمارکی، در کنار داستان‌های به ظاهر ساده‌ای مثل دختر کبریت‌فروش یا جوجه‌اردک زشت، داستان لباس جدید پادشاه رو نوشت که احتمالا اکثر ما یا کتابش رو در کودکی خوندیم، یا کارتونش رو تماشا کردیم.

فکر می‌کنم بد نباشه جامعه مهندسی نرم‌افزار، گاهی جلو آیینه بایسته و ببینه که چقدر لُخت است! توی قصه «پادشاه لخت»، مشکل فقط یک پادشاه ساده‌لوح نبود. مسئله، یک اکوسیستم کامل بود:

- خیاط‌های دروغین
- درباریان تأییدکننده
- جمعیتی که جرئت پرسیدن نداشت
و فقط یک کودک بود که گفت: چیزی تنش نیست!

اگر بخوایم صادق باشیم، ما هم در اکوسیستم نرم‌افزار، کم از اون دربار نداریم. و چقدر برای مناسب ظاهر شدن، نیاز به یادگیری و تلاش مضاعف داریم. خیاط‌های دروغین امروز همیشه شیادهای بیرونی نیستن.
گاهی در لباس لیدر فنی ظاهر می‌شن که بدون threat model و بدون طراحی امنیتی، سیستم رو «production-ready» اعلام می‌کنن.
گاهی در قامت تیم محصول که زمان تحویل را بالاتر از امنیت و کیفیت می‌نشونن.
گاهی در نقش مدیر که بودجه آموزش، معماری، یا امنیت رو هزینه اضافی می‌دونن.
و گاهی هم در قامت مهندس باتجربه‌ای که سال‌هاست چیز جدیدی یاد نگرفته ولی همچنان با اعتمادبه‌نفس حرف می‌زنه.

و درباریان؟
ما وقتی بدون خوندن دقیق PR رو تأیید می‌کنیم.
وقتی postmortem واقعی نمی‌نویسیم.
وقتی ضعف امنیتی رو می‌دونیم ولی می‌گیم “بعداً درستش می‌کنیم”.
وقتی outage رو «اتفاق طبیعی» جا می‌زنیم.

مسئله این نیست که هک شدیم یا نشدیم. کند یا ناپایدار هستیم یا نه!
مسئله اینه که آیا اصول مهندسی رو جدی گرفته‌ایم یا نه.

من قبلاً دو اپیزود درباره تولید امن نرم‌افزار ساختم. درباره: SSDLC, STRIDE, Shift-left, SAST, DAST, IAST, RASP, SCA
در مورد بدهی فنی هم یه ویدیو کوتاه


اما سؤال جدی اینه:
چند تیم واقعاً این‌ها رو در عمل اجرا می‌کنند، نه فقط در رزومه؟

اگر بخواهیم جلوی آینه بایستیم، شاید بهتر باشد به جای شعار، این چک‌لیست رو از خودمون بپرسیم:

آیا ما این‌ها رو داریم؟

- اصول Security by Design، نه Security after Incident
- مفاهیم Threat Modeling مستند
- ساختار Secure SDLC واقعی، نه اسلاید پاورپوینت
- مکانیزم‌های observability جدی
- ساختار Data Governance مشخص
- طبقه‌بندی داده و سیاست retention
- مدیریت دسترسی مبتنی بر اصل Least Privilege یا زیروتراست
- اصول Software Composition Analysis و مدیریت dependency
- ساختار Incident response plan تمرین‌شده
و...

اگر این‌ها نیست، ما فقط امیدواریم، مهندسی نمی‌کنیم.

روز مهندس شاید بیشتر از اونکه تبریک بخواد، احتیاج به صداقت داره.
صداقت با خودمون.

شاید وقتش باشه به جای تبریک‌های شاعرانه، هرکدوم‌مون یک ضعف مهندسی رو در تیممون جدی اصلاح کنیم. (جلو آینه بایستیم و لخت بودنمون رو ببینیم!)

لباس، با آرزو دوخته نمی‌شه.
با استاندارد، تمرین و مسئولیت‌پذیری دوخته می‌شه.




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

از استارتاپ‌های متعدد خصوصی‌ که هک شدن، تا بانک‌ و سازمانی که با هک شدن داده‌هاش نابود شد و از روی پیامک‌ها موجودی مردم رو بازسازی! کردن! تا نرم‌افزار دانشگاه تا... همه و همه گواهی بر لُختی جامعه نرم افزاریه!
15👍3🔥3👏1💯1