Masoud Bahrami Channel
الذهاب إلى القناة على Telegram
🔹 Welcome! I'm Masoud Bahrami, a software architect, engineer & trainer. Here, you'll find my thoughts and insights on software craftsmanship, domain modeling and designing. ☎️ Reach out for consulting & training: 🔗 MasodBahrami.com 📬 @MasodBahrami
إظهار المزيد1 205
المشتركون
لا توجد بيانات24 ساعات
-47 أيام
-1330 أيام
جاري تحميل البيانات...
القنوات المماثلة
سحابة العلامات
الإشارات الواردة والصادرة
---
---
---
---
---
---
جذب المشتركين
مايو '26
مايو '26
+1
في 0 قنوات
أبريل '26
+1
في 0 قنوات
Get PRO
مارس '26
+2
في 0 قنوات
Get PRO
فبراير '26
+5
في 0 قنوات
Get PRO
يناير '26
+4
في 0 قنوات
Get PRO
ديسمبر '25
+17
في 0 قنوات
Get PRO
نوفمبر '25
+21
في 0 قنوات
Get PRO
أكتوبر '25
+11
في 0 قنوات
Get PRO
سبتمبر '25
+14
في 0 قنوات
Get PRO
أغسطس '25
+12
في 1 قنوات
Get PRO
يوليو '25
+14
في 1 قنوات
Get PRO
يونيو '25
+17
في 0 قنوات
Get PRO
مايو '25
+19
في 0 قنوات
Get PRO
أبريل '25
+13
في 0 قنوات
Get PRO
مارس '25
+15
في 0 قنوات
Get PRO
فبراير '25
+12
في 0 قنوات
Get PRO
يناير '25
+19
في 0 قنوات
Get PRO
ديسمبر '24
+24
في 0 قنوات
Get PRO
نوفمبر '24
+17
في 1 قنوات
Get PRO
أكتوبر '24
+10
في 0 قنوات
Get PRO
سبتمبر '24
+15
في 1 قنوات
Get PRO
أغسطس '24
+24
في 1 قنوات
Get PRO
يوليو '24
+12
في 1 قنوات
Get PRO
يونيو '24
+10
في 0 قنوات
Get PRO
مايو '24
+14
في 1 قنوات
Get PRO
أبريل '24
+13
في 0 قنوات
Get PRO
مارس '24
+17
في 0 قنوات
Get PRO
فبراير '24
+9
في 1 قنوات
Get PRO
يناير '24
+23
في 0 قنوات
Get PRO
ديسمبر '23
+22
في 0 قنوات
Get PRO
نوفمبر '23
+18
في 1 قنوات
Get PRO
أكتوبر '23
+12
في 0 قنوات
Get PRO
سبتمبر '23
+16
في 0 قنوات
Get PRO
أغسطس '23
+18
في 0 قنوات
Get PRO
يوليو '23
+20
في 0 قنوات
Get PRO
يونيو '23
+17
في 0 قنوات
Get PRO
مايو '23
+15
في 0 قنوات
Get PRO
أبريل '23
+12
في 0 قنوات
Get PRO
مارس '23
+12
في 0 قنوات
Get PRO
فبراير '23
+16
في 0 قنوات
Get PRO
يناير '23
+17
في 0 قنوات
Get PRO
ديسمبر '22
+23
في 0 قنوات
Get PRO
نوفمبر '22
+17
في 0 قنوات
Get PRO
أكتوبر '22
+18
في 0 قنوات
Get PRO
سبتمبر '22
+25
في 0 قنوات
Get PRO
أغسطس '22
+10
في 0 قنوات
Get PRO
يوليو '22
+25
في 0 قنوات
Get PRO
يونيو '22
+27
في 0 قنوات
Get PRO
مايو '22
+25
في 0 قنوات
Get PRO
أبريل '22
+5
في 0 قنوات
Get PRO
مارس '220
في 0 قنوات
Get PRO
فبراير '220
في 0 قنوات
Get PRO
يناير '220
في 0 قنوات
Get PRO
ديسمبر '210
في 0 قنوات
Get PRO
نوفمبر '210
في 0 قنوات
Get PRO
أكتوبر '21
+14
في 0 قنوات
Get PRO
سبتمبر '21
+16
في 0 قنوات
Get PRO
أغسطس '21
+23
في 0 قنوات
Get PRO
يوليو '21
+15
في 0 قنوات
Get PRO
يونيو '21
+24
في 0 قنوات
Get PRO
مايو '21
+15
في 0 قنوات
Get PRO
أبريل '21
+40
في 0 قنوات
Get PRO
مارس '21
+51
في 0 قنوات
Get PRO
فبراير '21
+1 386
في 0 قنوات
| التاريخ | نمو المشتركين | الإشارات | القنوات | |
| 28 مايو | 0 | |||
| 27 مايو | 0 | |||
| 26 مايو | 0 | |||
| 25 مايو | 0 | |||
| 24 مايو | 0 | |||
| 23 مايو | 0 | |||
| 22 مايو | 0 | |||
| 21 مايو | 0 | |||
| 20 مايو | 0 | |||
| 19 مايو | 0 | |||
| 18 مايو | 0 | |||
| 17 مايو | 0 | |||
| 16 مايو | 0 | |||
| 15 مايو | 0 | |||
| 14 مايو | 0 | |||
| 13 مايو | 0 | |||
| 12 مايو | 0 | |||
| 11 مايو | 0 | |||
| 10 مايو | 0 | |||
| 09 مايو | 0 | |||
| 08 مايو | 0 | |||
| 07 مايو | 0 | |||
| 06 مايو | +1 | |||
| 05 مايو | 0 | |||
| 04 مايو | 0 | |||
| 03 مايو | 0 | |||
| 02 مايو | 0 | |||
| 01 مايو | 0 |
منشورات القناة
Three great podcasts with Grady Booch that are well worth watching and listening to
🛜 Coding is Easy. Architecture is Hard. Can AI Bridge the Gap?
https://www.youtube.com/watch?v=AdTICbCjszk
❇ The Craft of Software Architecture in the Age of AI Tools
https://www.youtube.com/watch?v=jp6rYyAaUUE
✴ The third golden age of software engineering – thanks to AI, with Grady Booch
https://www.youtube.com/watch?v=OfMAtaocvJw
| 2 | 👈معرفی تکنیک ریفکتورینگ Read-Rename-Reshape
در طول این سالهای تجربه در هدایت تیمهای فنی و بازطراحی سیستمهای بزرگ، به این باور رسیدهام که کدها چیزی فراتر از دستورالعملهای ماشین هستند؛ آنها در واقع همانطور که بارها اشاره کردهام حامل گفتگوهایی میان نیازمندیهای بیزنس و درک مهندسی ما هستند.
بزرگترین چالش زمانی رخ میدهد که این گفتگو با گذشت زمان دچار ابهام، فرضیات ضمنی (Implicit Assumptions) و فرسودگی معنایی میشود. در چنین شرایطی، ریفکتورینگ تبدیل به یک کابوس پرریسک میشود، که میتونم حدس بزنم خیلی از شماها هم باهاش دست و پنچه نرم کرده باشید.
// Messy example
public decimal Calc(Order o, decimal d, decimal t)
{
if(o.BasePrice < 0) throw new Exception("oops");
var result = o.BasePrice - d + t;
// just for the sake of simplicity!
Console.WriteLine("total: " + result);
return result;
}
به چند مورد از فرضیات و ابهامات کد بالا اگر بخواهیم اشاره کنیم:
⚪️ کد به وضوح بیان نمیکند که چه چیزی رو محاسبه میکند، بصورت ضمنی و بر اساس تجربیات قبلی یا از فحوای کد و کلام و شنیدههای میشود چیزهایی حدس زد.
⚪️ فهم دقیق از کد اگر هم وجود داشته باشد، در ذهن برنامهنویسانیست که ممکن است از شرکت هم رفته باشند.
⚪️ معنی دقیق d و t به عنوان ورودی مهم این فانکشن مشخص نیست
برای اینکه این سناریو که تقریبا همیشه باهاش در حال چالش هستم رو بتونم مدیریت کنم، رویکرد سادهای رو همیشه استفاده میکرد که اسمش رو گذاشته بودم تکنیک Read-Rename-Reshape
🟠 این رویکرد، ریفکتورینگ را از یک تغییر کدِ کورکورانه به یک فرآیند یادگیری تبدیل میکند:
1️⃣ مرحله Read: استخراج نیت (Intent) از دل آشفتگی
اولین گام، شنیدنِ آگاهانه کد است. قبل از هر تغییری، نیت اصلی نویسنده و منطق بیزنس را کشف میکنیم. ما به دنبال پاسخ این پرسش هستیم: این قطعه کد سعی دارد چه مسئلهای را حل کند که اکنون زبانش برای ما غریبه شده است؟
2️⃣ مرحله Rename: بهروزرسانی معنایی
نامگذاری، قدرتمندترین ابزار ما برای ثبتِ درک جدیدمان در بطن کد است. با اصلاح نامها (از متغیرها تا انتزاعهای کلان)، مه غلیظی که روی کد را گرفته عقب میزنیم تا حقیقتِ دامین نمایان شود.
3️⃣ مرحله Reshape: اصلاح هندسه معماری
تنها زمانی که معنا شفاف شد، ساختار را بازآرایی میکنیم تا با ساختار ذهنی بیزنس همراستا شود. اینجاست که قابلیت نگهداری (Maintainability) سیستم متولد میشود.
🟠 این متدولوژی کجا به کار میآید؟
تجربه من نشان داده که R3 در این ۳ نقطه حیاتی، تفاوت میان شکست و پیروزی پروژه را رقم میزند:
مواجهه با Legacy Code: وقتی با کدی روبرو هستید که هیچکس جرات دست زدن به آن را ندارد.
تغییرات بیزنسیِ سنگین: زمانی که مفهوم یک موجودیت در بیزنس تغییر کرده و کد فعلی مانع توسعه است.
این رویکرد بخش دیگری از تفکر طراحی Language-Driven Design (LDD) است؛ تلاشی برای اینکه معماری نرمافزار، بازتابی دقیق از زبان و دانش دامین باشد.
🔗 https://masoudbahrami.com/article/read-rename-reshape-refactoring/ | 504 |
| 3 | OOP vs. DOP: Which One to Choose? by Venkat Subramaniam
There is a long-standing debate in software development between Object-Oriented Programming (OOP) and Data-Oriented Programming (DOP).
Personally I believe that both approaches can be highly effective when applied with the right mindset and context, and both can become a nightmare when used incorrectly.
In this interview, Venkat Subramaniam shares a pragmatic perspective on the subject, focusing on
thinking models, trade-offs, and when each approach makes sense.
🎥 Watch the talk:
https://www.youtube.com/watch?v=jfgheGxw8lc | 316 |
| 4 | 📌 Chapter 4 of my book "Epistemic Testing | Practical Software Test Automation" is out!
Before you test the system, test your own certainty.
Most testing books start with code. This one insists you start with yourself. Every test you write is an artifact of belief. It’s a mirror that quietly reflects what you think is true, or what you want to be true, about the system you’re building. That means every failure in testing is, first, a failure in thinking. When you test, you are not merely verifying behavior. You are holding a mirror to your own thinking.
Testing isn’t just a technical act; it’s an epistemic one, a way of knowing. And the mind behind that knowledge is fragile, biased, and occasionally overconfident. That’s not a flaw in testers; that’s the human condition. So, before we can write reliable tests, we need to study the mind that writes them.
📕 Read the chapter for free. Feel free to leave a comment or feedback!
https://masoudbahrami.com/article/epistemic-testing-chapter-04-who-tests-the-tester/ | 547 |
| 5 | معرفی الگوی طراحی نرمافزار Behavior as Data
توی تجربه طراحی دومینهای پیچیده بارها شاهد این موضوع بودم و باهاش دست و پنجه نرم کردم که تغییر کوچیکی در فیلدی به ظاهر خیلی ساده یا حتی افزودن و جابجایی مقادیر یک enum رفتار و منطق گسترهی خیلی زیادی از سیستم شامل تست و کدها رو تحت تاثیر خودش قرار داده.
جهت حل مشکل بالا، من الگوی طراحی Behavior as Data رو معرفی کردم که کمک میکنه بتونیم بر همچین سناریوهایی غلبه کنیم.
این الگو بصورت کلی به ما این امکان رو میده که متوجه بشیم چه موقع یک فیلد ساده یا مقادیر یک enum بهتره تبدیل بشن به یک مدل مشخص دیتایی و رفتاری.
توی مقاله یکسری هیوریستیک و نشانه که به توسعهدهنده و افراد محصولی کمک میکنه به این موضوع پی ببرند به همراه مثالهای واقعی ارایه شده
https://www.linkedin.com/pulse/introducing-behavior-data-pattern-masoud-bahrami-qc2cf | 477 |
| 6 | آقای حمید مدنی از مدیرای فنی اسنپفود توی این پست توی این پست بحث جالبی رو مطرح کرد که بد ندیدم من هم تجربهای از جنس نقاط کور عملیاتی این بحث بگم، هدفم نقد یا رد مدل ایشون نیست، مزایاش رو اشاره کردن من هم یکم صحبت از جنس نقاط کور تجربه شده و خونده شده اینجا مطرح میکنم و راهحلی که رفتیم رو هم اشاره میکنم آخر این پست، امیدوارم مفید واقع بشه
ما هم چند سال پیش در یکی از پروژهها دنبال ساختن چارچوبی مشابه بودیم؛ مدلی که تیمها بدون قضاوت بتونن بفهمن سرویسشون دقیقاً کجاست و چه چیزهایی باید بهبود پیدا کنه. تا حدی هم موفق بود، اما تجربهی اجرا نکات جالبی داشت
سختترین و دارکترین بخش همین context-aware تصمیمگیری بود، نه لزوما تعریف متریکها برای حرکت سرویسها توی لایههای مدل(اولش فکر میکردیم سخترینش تعریف و اعمال و پیادهسازی متریکهاست بعد دیدم واقعا سادهتر از چیزی که فکرش رو میکردیم و چالش اصلی جای دیگه است) بلکه فهمیدن و وزندهی نقش واقعی هر سرویس توی بیزنس بخصوص برای کسبوکاری که دائما در حال تغییر و رفع باگ و افزودن فیچر جدید. اما context-aware کردن کل مدل، اونقدر پیچیده و nuanced بود که گاهی کل فرآیند رو فلج میکرد
خواسته یا ناخواسته توی اسکیل بزرگ ابزارها بهمرور نقش کریتیکالی پیدا میکنند بدون اینکه کسی از قبل براشون نقشهای چیده باشه و رفتار واقعی سیستم همونی که باید سنجیده بشه، لابهلای بالا و پایین شدن سرویسها توی مدل گم میشد. اوبر هم تجربهای زیسته از همین جنس داشت به اسم Service Maturity Index
یه چالش دیگه که ما مستقیم کمتر باهاش درگیر شدیم ولی تو اسکیل بالا ناگزیره، نرخ sampling واسه سنجش صحت و سلامت هر سرویس برای تصمیمگیری دادهمحوره. سرویسهای rate بالا، دیتای زیادی تولید میکنن و پرفورمنس توشون حیاتیه برا همین sampling میره روی عددایی مثل ۰.۰۰۱٪. بر اساس دیتای ذخیرهشده همهچیز خوبه، اما در عمل لزوماً اینطور نیست. اینجا باید مراقب بود که آمار تبدیل به فکت نشن
توی Software Engineering at Google هم به تجربه مشابهی اشاره شده که آخرش میگه بلوغهای اینجوری چون جنسشون استانداردسازیه و استانداردسازی یعنی محدودیت (و برای بعضیها اجبار)، بهتره بر اساس outcomeها مثل کاهش MTTR سنجیده بشه که کار سختیه واقعا!
مارتین فاولر هم یه نوشته کوتاه داره به اسم The Maturity Model Fallacyکه میگه مدلها اگر از کمک به گام بعدی تبدیل بشن به رتبهبندی ضد خودشون عمل میکنن.
چالش دیگه توی تجربه من، فشار وحشتناک روی زیرساخت و ops بودش و خب بالاخره این فشار خودش رو توی قالب تجربه و بد اسملهای دیگه خودش رو نشون میده و میزنه بیرون. در حالی که تیم dev یا وقت نمیکرد توازن بین خروجی بیزنس و متریکها رو تنظیم کنه یا چند سرویس به ارث رسیده بهش بود، یا اصلا سرویسهای بیصاحب بودن :) که کسی از وجودشون خبر نداشت! context-aware نبودن اینجا هم دردسر میساخت. بعدا فهیمیدم اسپاتیفای مدل جالبی رو پیش گرفته برای این سناریوها به اسم اسپاتیفای رویکرد golden paths
🔵 اما چه کردیم ما؟
حالا کاری که ما کردیم مدل رو از سطحدادن خام به سرویسها بردیم سمت دستهبندی بر اساس ماهیت کسبوکاری و تاثیرشون روی زنده موندن بیزنس. متریکها میانگین میگرفتن و اسکور هر چند وقت تکرار میشد. چون سرویسی مثل notification بعد ۶ ماه با رشد بیزنس، criticalityش عوض میشه. اینطوری سرویسها نیازمندی ops خودشون رو مشخص میکردن و از نگاه یکسان به همه خارج میشدیم، بدون اینکه سطح پایین یعنی کمکاری تیم باشه. خیلی مختصر و کوتاه بخوام بگم:
🔹معیارهای امتیازدهی ما
برای هر سرویس، این بُعدها رو امتیاز میدادیم (ترکیب بیزنسی + فنی + سازمانی):
1- حیاتی بودن بیزنسی: core مثل پرداخت/جستجو/قیمتگذاری/کد تخفیف/پیشنهاد محصول یا حاشیهای! وزنشون توی revenue/user journey چقدره
2- حجم/نوع ترافیک: read-heavy/mixed، latency-sensitive؟ downtime چقدر UX رو میزنه؟
3- موقعیت در dependency graph: failureش چند سرویس دیگه رو میندازه؟ golden path کاربر ازش رد میشه؟
4- همخوانی استک: مثلا با talent سازمان مچ میشه؟ learning curve/bus factor چقدر ریسکیه؟ تکنولوژی یه زبونی نباشه که هیشکی توی سازمان بلدش نیست، علیرغم اینکه خیلی هم تکنولوژی یا زبان برنامه نویسی خوبی هم براش انتخاب شده
5- مالکیت تیمی: تیم مشخص/توانمند داره یا ارثیه/بیصاحب؟😁 incidentش چند تیم رو درگیر میکنه؟ شعاع تاثیرش یا radius effectاش چقدر.
6- فرآیند dev: deploy frequency/rollback readiness، وابستگی به افراد کلیدی، end-to-end ownership؟
و نهایتا کنار اینها یا بهتره بگم بر اساس اینها MTTD/MTTR، deploy failure rate، alert quality، observability رو اضافه میکردیم. ترکیبشون نشون میداد کجا ارزش داره سرمایهگذار (ن)کنیم | 538 |
| 7 | و نهایتا کنار اینها یا بهتره بگم بر اساس اینها MTTD/MTTR، deploy failure rate، alert quality، observability رو اضافه میکردیم. ترکیبشون نشون میداد کجا ارزش داره سرمایهگذار (ن)کنیم | 1 |
| 8 | آقای حمید مدنی از مدیرای فنی اسنپفود توی این پست توی این پست بحث جالبی رو مطرح که بد ندیدم من هم تجربهای از جنس نقاط کور عملیاتی این بحث بگم، هدفم نقد یا رد مدل ایشون نیست، مزایاش رو اشاره کردن من هم یکم صحبت از جنس نقاط کور تجربه شده و خونده شده اینجا مطرح میکنم و راهحلی که رفتیم رو هم اشاره میکنم آخر این پست، امیدوارم مفید واقع بشه.
ما هم چند سال پیش در یکی از پروژهها دنبال ساختن چارچوبی مشابه بودیم؛ مدلی که تیمها بدون قضاوت بتونن بفهمن سرویسشون دقیقاً کجاست و چه چیزهایی باید بهبود پیدا کنه. تا حدی هم موفق بود، اما تجربهی اجرا نکات جالبی داشت.
سختترین و دارکترین بخش همین context-aware تصمیمگیری بود، نه لزوما تعریف متریکها برای حرکت سرویسها توی لایههای مدل(اولش فکر میکردیم سخترینش تعریف و اعمال و پیادهسازی متریکهاست بعد دیدم واقعا سادهتر از چیزی که فکرش رو میکردیم و چالش اصلی جای دیگه است) بلکه فهمیدن و وزندهی نقش واقعی هر سرویس توی بیزنس بخصوص برای کسبوکاری که دائما در حال تغییر و رفع باگ و افزودن فیچر جدید. اما context-aware کردن کل مدل، اونقدر پیچیده و nuanced بود که گاهی کل فرآیند رو فلج میکرد.
خواسته یا ناخواسته، در اسکیل بزرگ، ابزارها بهمرور نقش کریتیکالی پیدا میکنند، بدون اینکه کسی از قبل براشون نقشهای چیده باشه و رفتار واقعی سیستم، همون چیزی که باید سنجیده بشه، لابهلای بالا و پایین شدن سرویسها توی مدل گم میشد. اوبر هم تجربهای زیسته از همین جنس داشت به اسم Service Maturity Index
یه چالش دیگه که ما مستقیم کمتر باهاش درگیر شدیم ولی تو اسکیل بالا ناگزیره، نرخ sampling واسه سنجش صحت و سلامت هر سرویس برای تصمیمگیری دادهمحوره. سرویسهای rate بالا، دیتای زیادی تولید میکنن و پرفورمنس توشون حیاتیه برا همین sampling میره روی عددایی مثل ۰.۰۰۱٪. بر اساس دیتای ذخیرهشده همهچیز خوبه، اما در عمل لزوماً اینطور نیست. اینجا باید مراقب بود که آمار تبدیل به فکت نشن.
توی Software Engineering at Google هم به تجربه مشابهی اشاره شده که آخرش میگه بلوغهای اینجوری چون جنسشون استانداردسازیه و استانداردسازی یعنی محدودیت (و برای بعضیها اجبار)، بهتره بر اساس outcomeها مثل کاهش MTTR سنجیده بشه که کار سختیه واقعا!
مارتین فاولر هم یه نوشته کوتاه داره به اسم The Maturity Model Fallacyکه میگه مدلها اگر از کمک به گام بعدی تبدیل بشن به رتبهبندی ضد خودشون عمل میکنن.
چالش دیگه توی تجربه من، فشار وحشتناک روی زیرساخت و ops بودش و خب بالاخره این فشار خودش رو توی قالب تجربه و بد اسملهای دیگه خودش رو نشون میده و میزنه بیرون. در حالی که تیم dev یا وقت نمیکرد توازن بین خروجی بیزنس و متریکها رو تنظیم کنه یا چند سرویس به ارث رسیده بهش بود، یا اصلا سرویسهای بیصاحب بودن :) که کسی از وجودشون خبر نداشت! context-aware نبودن اینجا هم دردسر میساخت. بعدا فهیمیدم اسپاتیفای مدل جالبی رو پیش گرفته برای این سناریوها به اسم اسپاتیفای رویکرد golden paths
🔵 اما چه کردیم ما؟
حالا کاری که ما کردیم مدل رو از سطحدادن خام به سرویسها بردیم سمت دستهبندی بر اساس ماهیت کسبوکاری و تاثیرشون روی زنده موندن بیزنس. متریکها میانگین میگرفتن و اسکور هر چند وقت تکرار میشد. چون سرویسی مثل notification بعد ۶ ماه با رشد بیزنس، criticalityش عوض میشه. اینطوری سرویسها نیازمندی ops خودشون رو مشخص میکردن و از نگاه یکسان به همه خارج میشدیم، بدون اینکه سطح پایین یعنی کمکاری تیم باشه. خیلی مختصر و کوتاه بخوام بگم:
🔹معیارهای امتیازدهی ما
برای هر سرویس، این بُعدها رو امتیاز میدادیم (ترکیب بیزنسی + فنی + سازمانی):
1- حیاتی بودن بیزنسی: core مثل پرداخت/جستجو/قیمتگذاری/کد تخفیف/پیشنهاد محصول یا حاشیهای! وزنشون توی revenue/user journey چقدره
2- حجم/نوع ترافیک: read-heavy/mixed، latency-sensitive؟ downtime چقدر UX رو میزنه؟
3- موقعیت در dependency graph: failureش چند سرویس دیگه رو میندازه؟ golden path کاربر ازش رد میشه؟
4- همخوانی استک: مثلا با talent سازمان مچ میشه؟ learning curve/bus factor چقدر ریسکیه؟ تکنولوژی یه زبونی نباشه که هیشکی توی سازمان بلدش نیست، علیرغم اینکه خیلی هم تکنولوژی یا زبان برنامه نویسی خوبی هم براش انتخاب شده
5- مالکیت تیمی: تیم مشخص/توانمند داره یا ارثیه/بیصاحب؟😁 incidentش چند تیم رو درگیر میکنه؟ شعاع تاثیرش یا radius effectاش چقدر.
6- فرآیند dev: deploy frequency/rollback readiness، وابستگی به افراد کلیدی، end-to-end ownership؟ | 17 |
| 9 | 🍉🍉پیشنهاد ویژه یلدا | ۳۰٪ تخفیف برای دورههای پیشرفته مهندسی نرمافزار
به مناسبت یلدا، فرصتی برای تمرکز بر توسعه مهارتهای حرفهای و تقویت بنیانهای مهندسی نرمافزار فراهم شده است.
در همین راستا، برای مدت محدود ۳۰٪ تخفیف برای دو دورهی تخصصی زیر در نظر گرفتهایم:
🔵 Clean Code Mastery
دورهای عملی برای توسعهدهندگانی که میخواهند کدهای تمیز، قابلنگهداری و توسعهپذیر بنویسند.
تمرکز دوره بر Clean Code، Refactoring حرفهای، Design Principles، Testing و معماری تمیز در پروژههای واقعی است.
🟣 Enterprise Integration Patterns – Advanced Architectural Workshop
ویژهی معماران و توسعهدهندگان سیستمهای توزیعشده، با تمرکز بر
Event-Driven Architecture، Messaging، Saga، Integration Strategy و طراحی ارتباط بین سرویسها در مقیاس Enterprise.
این تخفیف مناسب افرادی است که به یادگیری عمیق، تصمیمهای مهندسی پایدار و رشد بلندمدت حرفهای اهمیت میدهند.
📅 ظرفیت دورهها محدود است
🔗 اطلاعات بیشتر و ثبتنام:
domaindrivendesign.ir | 283 |
| 10 | 🔵 Clean Code Mastery – Advanced Software Craftsmanship Workshop
در سالهای اخیر، بسیاری از تیمها با رشد پروژه و اضافهشدن فیچرها، بهجای سرعت بیشتر، با کدهای سنگین، سختخوان، پر از بدهی فنی و توسعهپذیری پایین روبهرو شدهاند. از Refactorهای پرهزینه گرفته تا باگهایی که در سادهترین تغییرات ظهور میکنند.
تقریباً تمام تیمها در نقطهای از مسیر توسعه، با یک حقیقت تلخ روبهرو میشوند:
مشکل اصلی، زبان برنامهنویسی یا تکنولوژیها نیست، کیفیت کدی است که هر روز تولید میشود. حتی در حضور و ظهور AI.
⚪️ ویژگیهای کلیدی دوره:
🔹آموزش عملی Clean Code، Refactoring، Design Principles و معماری تمیز
🔹تمرینهای واقعی روی کدهای Legacy
🔹شناسایی و حذف Code Smellها در پروژههای واقعی
🔹کارگروهی، Code Review، PR Workflow و تحلیل مشکلات واقعی تیمها
🔹آشنایی با معماریهای Clean/Hexagonal و رویکرد DDD در سطح کاربردی
🔹یادگیری TDD، Unit/Integration Testing و طراحی Evolvable Code
📅ساختار دوره:
۵ جلسه تخصصی × ۴ ساعت
یک جلسهٔ Hands-on عملی + Q&A
برای جزئیات کامل و ثبتنام:
🔗domaindrivendesign.ir | 332 |
| 11 | Enterprise Integration Patterns – Advanced Architectural Workshop🟣
در سالهای اخیر، بسیاری از تیمها با مهاجرت به EDA به جای کاهش پیچیدگی، با چالشهای تازهتری روبهرو شدهاند، از وابستگیهای شکننده بین سرویسها تا همگامسازی دادهها، مدیریت Eventها، Retryها، Consistency و طراحی Strategy درست برای Integration.
پس از تجربه روی پروژههای Enterprise در مقیاس بزرگ، به این نتیجه رسیدیم که کارایی یک سیستم توزیعشده نه با تعداد سرویسها، بلکه با کیفیت ارتباط بین آنها سنجیده میشود.
ویژگیهای کلیدی دوره:
- آموزش عملی EIP، Messaging، Kafka، Routing، Saga، Stream Processing
- تحلیل و انتخاب الگوی معماری مناسب برای سناریوهای واقعی
- Hands-on گروهی برای طراحی یک Integration Architecture واقعی
- طراحی Enterprise Integration Blueprint به عنوان خروجی نهایی دوره
📅 ساختار دوره
۷ جلسه آموزش تخصصی + ۲ جلسه Hands-on گروهی
⏱️ پنجشنبهها ساعت ۱۵ تا ۱۸
🎯 خروجی دوره: معماری واقعی قابل ارائه در سازمانها + تجربه عملی حل سناریوهای Distributed
برای جزئیات کامل:
🔗 domaindrivendesign.ir | 360 |
| 12 | 📱 روز پایتون ایران | PyDay Iran 2025
در پایدی امسال ۲۰ سخنران و پنلیست از حوزههای مختلف پایتون، از معماری نرمافزار، AI/ML، Data Engineering، تا DevOps/SRE روی صحنه خواهند رفت.
این رویداد شامل:
- سخنرانیهای فنی و تخصصی
- سه پنل تخصصی (مسیر رشد و منتورینگ، زیرساخت در مقیاس و معماری نرمافزار در ایران)
- و شبکهسازی است
📆 پنجشنبه ۲۷ آذر ۱۴۰۴
⏰ ۹:۰۰ الی۲۰:۳۰
🗺 سالن همایشهای کتابخانهٔ ملی تهران
⚠️ ظرفیت باقیمانده، مخصوصا دانشجویی محدود است پس همین امروز ثبتنام کنید.
🔗 ثبتنام و اطلاعات بیشتر:
https://evand.com/events/pyday2025
https://pyday.ir
برگزارکننده: کدباز @code_baz_com | 342 |
| 13 | An amateur Setar performance from my personal practice 🎶
Just a few sentences from Pish-Daramad (Prelude) in Dashti, composed by Maestro Reza Mahjoubi, a humble attempt to touch a piece of its depth and beauty.
I’m still learning, still exploring, but I wanted to share a small moment from this journey.
There’s something uniquely soothing in the Dashti mood, a mixture of nostalgia, calm, and quiet emotion that always brings me back to the present.
🎧 I hope these few notes offer a breath of peace and a gentle pause in the middle of your day.
Thank you for listening 🌿
https://www.youtube.com/watch?v=BjD3ycxxC0E
https://artebox.org/mahjubi-02/ | 380 |
| 14 | پنجشنبهی گذشته توی یک ورکشاپ خصوصی طراحی شیءگرا که سهیل کرمی برگزار کرده بود شرکت کردم. قرار بود بازی Catan رو یاد بگیریم، مدل کنیم و طراحی کنیم.
برای من که تجربهی زیادی در بازیهای رومیزی ندارم، دنیای این بازی واقعاً پیچیده بود و طبیعتاً مدلسازیش هم همینطور 😋😏
اما جذابترین بخش ماجرا همکاری دولوپرهایی بود با تجربههای متفاوت از نظر quantity، quality و depth و اینکه چطور با هم توی مدلسازی یک مسئلهی پیچیده همکاری میکردند.
بچهها مشغول بازی شدن، دیاگرام میکشیدن، تستکیس مینوشتن، حرف میزدن، کد میزدن و دوباره اصلاح میکردن.
میز و کد ظرف چند دقیقه تبدیل شد به جنگلی از اسمها(تا جایی که حضور ذهن دارم!):
Hexagon, Tile, Board, Player, Road, Dice, City, Village, Wood, Brick, Sheep, … 🌪
و خیلی زود این جنگل از اسمها باعث یک سردرگمی مشترک شد:
🔴 پیدا کردن مسیر طراحی بین یک عالمه اسم و رابطهی احتمالی.
توی چنین لحظههایی یک اصل ساده همیشه به من کمک کرده، و همونجا پیشنهاد دادم امتحانش کنن:
از مفاهیم Active شروع کنید، نه Passive
خیلی خلاصه اگر بخوام بگم.
🔹 مفاهیم Passive در دامنه چیزهایی هستند که هیچ جریان فعالی را شروع نمیکنند. مدل میشوند، یک جایی قرار میگیرند، و منتظر میمانند تا توسط یک use case دیگر تریگر شوند. معمولاً اطلاعات پایه و context را شکل میدهند. مثلاً در حسابداری: Account، Currency، CostCenter
🔹 مفاهیم Active در نقطه مقابل قرار دارند، چیزهایی که اتفاق را رقم میزنند. رفتار ایجاد میکنند، تصمیم میگیرند و بقیه اجزا را به هم وصل میکنند. مثلاً: PostTransaction, TransferMoney, PlaceOrder, BookAppointment
حتی در مثال Catan، شما اول Board و قطعات و مخلفاتش رو میسازید؛ اما تا وقتی Player شروع به بازی نکند، هیچ اتفاق معناداری نمیافتد. همون لحظه است که ارتباط مفاهیم آشکار میشود.
وقتی مدلسازی را از Active شروع میکنیم:
🔹 نقطه ورود روشن میشود
🔹 رفتار سیستم شکل میگیرد
🔹 ساختار و وابستگیها به طور طبیعی کشف میشوند
🔹 به جای نمودارهای زیبا و بیمعنی، یک سیستم زنده ساخته میشود
🔹 مدلسازی اسمها نیست؛ مدلسازی اتفاقهاست
🔹 Behavior است که ساختار را میسازد، نه برعکس
خلاصه پیشنهادم برای دامنههای پیچیده یا ناشناخته:
✔️ از رفتار شروع کنید
✔️ طراحی را از مفاهیم Active آغاز کنید
✔️ اجازه دهید ساختار از دل اتفاقها شکل بگیرد
📄 کل مقاله و مثالهای بیشتر را اینجا بخوانید:
https://masoudbahrami.com/article/active-vs-passive-domain-concepts-in-designing-complex-domains/ | 666 |
| 15 | :
🎬 ویدئوی رویداد: Exploratory Domain Discovery - Live Demo
🔵 معرفی کوتاه: Exploratory Domain Discovery(EDD) یک رویکرد مدلسازی و طراحی مشارکتی است که با شروع از نتیجه (Outcome) مورد انتظار از سیستم، فضای مسئله را به صورت معکوس (Backward) مدلسازی میکند.
این رویکرد با داشتن متدولوژی منحصر به فرد خود، ابزاری قدرتمند برای فهم و مدلسازی دامنههای پیچیده به شمار میرود. EDD یک روش تجربی و سریع است که به ما کمک میکند تا کلیدیترین مفاهیمی که نقشی اساسی در طراحی و مدلسازی فضای مسئله دارند را کشف کنیم.
اجزای سازنده اصلی EDD (ساده و کمتعداد):
🔹 کارت مفهوم دامنه (Domain Concept)
🔹 ارتباطات بین مفاهیم دامنه
🔹 کارت مثال (Example) به ازای هر مفهوم دامنه
🔹 کارت سوال یا چالش
🔹 کارت قانون کسبوکار (Business Rule)
🎙 محتوای این رویداد:
مسعود بهرامی در این رویداد، ضمن معرفی کامل EDD، به صورت عملی و زنده (Live Demo) نشان داد که چطور میتوان از این رویکرد برای مدلسازی یک دامنه پیچیده بهره برد.
خبر خوب برای علاقهمندان: در وبینار بعدی به صورت زنده نشان خواهیم داد که EDD چگونه میتواند در مرحله طراحی سیستم (System Design) به ما کمک کند.
لینک تماشای کامل ویدئو: 👇
https://www.youtube.com/watch?v=brMtD9s7Ne4&t | 803 |
| 16 | 📚 لیست منابع برای مطالعه بیشتر
1. کتاب Radical Candor
مدیریت انسانی، بازخورد صادقانه و محترمانه
🔗 https://www.radicalcandor.com/the-book
2. مقاله "Communication is The Job"
نوشتهی اندرو بوسورث (CTO متا) – اهمیت نقش ارتباطات در تیمها
🔗 https://boz.com/articles/communication-is-the-job
3. پادکست WeAreNetflix – موضوع: Feedback
گفتگو درباره فرهنگ بازخورد در نتفلیکس
🔗 https://www.youtube.com/watch?v=M-NYcfyVMeU
4. ویدیو: 5 درس برتر رید هستینگز، مدیرعامل نتفلیکس
🔗 https://www.youtube.com/watch?v=BH-Dq50Cz8Q
5. سخنرانی Patty McCord – Creating High Performance Culture (Talks at Google)
🔗 https://www.youtube.com/watch?v=thzDy5A-KfE
6. Netflix’s Engineering Culture
پست / پادکست گرگ اوروز با CTO نتفلیکس، الیزابت استون
🔗 https://newsletter.pragmaticengineer.com/p/netflix
7. Sustaining a Day 1 Culture – Amazon
سخنرانی بث گالتی (Amazon SVP HR)
🔗 https://www.youtube.com/watch?v=oq69KKpq0b0
8. How Netflix builds a culture of excellence – Lenny’s Podcast
گفتگو با الیزابت استون (CTO)
🔗 https://www.youtube.com/watch?v=2XgU6T4DalY | 314 |
| 17 | 🌟 رویداد چهارم نقطه: چه چیزی فرهنگ تیمی موفق را میسازد؟
در تیمهای موفق، فرهنگ فقط به فعالیتهای سرگرمکننده یا ارزشهای شعاری محدود نمیشود، بلکه شامل رفتارها، ارتباطات، اعتماد و روشهای مشترک کار کردن است.
در این جلسه بحث و تبادل نظر گروهی، بررسی میکنیم:
- اعضای تیم چگونه روی فرهنگ اثر میگذارند
- چه رفتارهایی تشویق یا محدود میشوند
- چگونه تعارضات، بازخورد و موفقیتها تیم را شکل میدهند
سؤالات برای بحث:
⬅️ چه رفتارها یا عادتهایی تیم را مثبت و مؤثر میکنند؟
⬅️ اعتماد در تیم چگونه شکل میگیرد و چه چیزی آن را خراب میکند؟
⬅️ تیم شما با اختلاف نظر یا تعارضها چگونه برخورد میکند؟
⬅️ چه روشها یا مراسمی به تیم کمک میکنند هماهنگ و انگیزهمند باقی بماند؟
🗓 تاریخ: سهشنبه، ۲۸ آبان ۱۴۰۴
🕖 زمان: ۱۹:۰۰ – ۲۰:۳۰
💻 مکان: آنلاین(لینک رویداد برای افراد بعدا ارسال خواهد شد)
🔵 لینک ثبتنام:
https://luma.com/r09py22a
🔵 صفحه رویداد در لینکدین(لطفا بر روی attend کلیک کنید)
https://www.linkedin.com/events/7395354056090750976/ | 250 |
| 18 | Failure teaches What Success Hides
When teams talk about test automation failure, the discussion almost always begins at the code level:
- The developer didn’t write clean tests.
- The framework wasn’t chosen correctly.
- The QA team lacked skill.
That’s not wrong, but it’s incomplete. It’s like examining a car’s performance only by looking at the tires, because tires make it move. Or only checking the engine, assuming that’s where power comes from. But a car is a system of relationships, engine, transmission, steering, fuel, electronics, and a small delay, friction, or misalignment in any of them can compromise the whole. Testing failures are systemic in the same way.
While writing the booklet, I realized something interesting:
My test automation mistakes naturally fell into seven distinct but connected categories...
Read it👉: https://masoudbahrami.com/article/why-we-learn-more-from-broken-tests-than-from-perfect-ones/ | 344 |
| 19 | اطلاع رسانی رویداد آنلاین Exploratory Domain Discovery - Live Demo
یکی از بزرگترین چالشها در توسعهی نرمافزار و طراحی محصول، ایجاد درک مشترک از دامنهی مسئله میان اعضای تیم است. برنامهنویسان، مدیران محصول و تحلیلگران معمولاً از زاویههای متفاوتی به مسئله نگاه میکنند و این تفاوت دیدگاه میتواند تصمیمگیری و طراحی را پیچیده کند.
کارگاه EDD یک رویکرد مشارکتی و عملی است که به تیمها این امکان را میدهد که:
✅ تصویری مشترک از دامنهی مسئله ایجاد کنند،
✅ مفاهیم و مرزهای اصلی سیستم را شفافسازی کنند،
✅ و تصمیمهای طراحی را بر اساس فهم مشترک اتخاذ کنند.
📅 زمان: جمعه، ساعت 17:00 الی 18:30
🌐 محل: آنلاین – LinkedIn Live
💬 شرکت رایگان است!
در این جلسه، EDD را روی یک مثال واقعی بهصورت زنده مرور خواهیم کرد و کاربرد آن در پروژههای واقعی را بررسی میکنیم.
🔗 لینک حضور در رویداد(لطفا دکمه attend رو بزنید). لطفا با بقیه هم به اشتراک بگذارید.
https://www.linkedin.com/events/7392826863901016064/
🔗جهت اطلاعات بیشتر در مورد EDD به لینک زیر مراجعه فرمائید
https://exploratorydomaindiscovery.com/ | 254 |
| 20 | 📣 Finally I managed to release my handbook:
How to Fail Test Automation Easily!
Lessons I’ve Learned (and Unlearned) from Failed Test Automation
This handbook dives deep into 60+ real-world mistakes in test automation that I’ve seen countless teams make, small, daily habits that silently destroy test reliability, slow down development, and erode confidence.
📙 Inside, you’ll find practical guidance and examples on:
1. Strategy & Mindset: How teams think about testing, not just how they do it. Avoid treating testing as a checkbox or a late-phase activity.
2. Test Design & Intent: Writing meaningful tests, avoiding overlapping coverage, and focusing on behavior, not implementation.
3. Technical & Execution Mistakes: Handling flaky, slow, or fragile tests, and creating resilient test setups.
4. Tools & Infrastructure: Choosing frameworks wisely, CI/CD pipelines, observability, and maintaining test suites.
5. Team & Collaboration: Breaking silos between QA, Dev, and Product, defining ownership, and improving knowledge sharing.
6. Cost & Value: Understanding ROI, avoiding uneconomical tests, and prioritizing what really matters.
7. Context & Local Challenges: Real-world constraints, common anti-patterns, and strategies to test effectively in complex domains.
💡 Beyond the lessons, the book also includes:
✅ Checklists for healthy testing habits and common bad smells
✅ A Test Strategy Template to guide your team’s approach
✅ Domain-Centric Test Naming examples to align tests with business intent
✅ A Metrics Cheat Sheet showing what to measure (and what to ignore)
With concrete JavaScript examples, realistic scenarios (like bookings, orders, and accounting), and actionable solutions, this book helps you build tests that actually protect both the software and the business.
Whether you are a developer, QA engineer, architect, or team lead, this book will help you recognize bad practices, understand why they happen, and adopt healthy testing habits that improve confidence, speed, and maintainability.
🙏 It’s completely free, if you find it useful, please share it with your team, colleagues, or anyone who’s passionate about better testing.
✍️ Author: Masoud Bahrami
🌐 MasoudBahrami.com
📘 Version: 1.0.0
Download for free:
https://leanpub.com/TestAutomationMistakes | 774 |
