بسم الله الرحمن الرحیم

روال تصمیمگیری چه جایگاه و اهمیتی در تدوین معماری نرمافزار دارد؟ روش تصمیمسازی و تصمیمگیری مطمئن چه ویژگیهای باید داشته باشد؟ چطور تصمیماتمان را مستند کنیم؟
همانطور که قبلاً شرح دادم من این تعریف را برای معماری نرمافزار بیشتر میپسندم:
تعریف معماری نرم افزار: مجموعه تصمیمات مهم در فرایند توسعه نرمافزار با هدف مدیریت مخاطرات
با این تعریف تقریباً میتوان گفت معماری نرمافزار چیزی جز تصمیمگیری نیست. بعد از آنکه درک اولیه از فضای مساله پیدا شد، طراحی فضای راهحل شروع میشود. در این نقطه با دو راهیهای مختلفی مواجه میشویم.
اگر بخواهیم یک نرمافزار خوب داشته باشیم باید روال درست تصمیمگیری را بلد باشیم.
برای اینکه فکر خود را نظم دهیم، در ابتدا لیستی از سؤالات معماری استخراج میکنیم. این لیست اصطلاحاً ADL (مخفف Architecture Decision Log) نامیده میشود.
برای پاسخگویی صحیح به سؤالات معماری گامهای زیر پیشنهاد میشود.

تیمهای نرمافزاری معمولاً در قالب «سند معماری نرمافزار» یا SAD ساختار محصولشان را مستند میکنند. ولی مستندسازی تصمیمات معماری رواج کمتری دارد. در سالهای اخیر روی مستندسازی تصمیمات معماری در قالب ADR (مخفف Architecture Decision Record) تاکید بیشتری میشود (مثل این و این و این). چرا که کمک میکند دلیل تصمیمات معماری را افراد بیرون تیم یا اعضای جدید تیم سریعتر درک کنند و حتی در طول زمان در بازنگری تصمیمات به تیم کمک مینماید. چند ADR نمونه اینجا قابل مشاهده است.
در شرکت اعوان تجربه بسیار مثبتی از مستندسازی تصمیمات معماری در حین فرایند تصمیمگیری داریم. یعنی به جای آنکه پس از انعقاد تصمیمات آنها را مستند کنیم، معمار نرمافزار در حین تصمیمگیری دست به قلم میشود. سؤالات را نوشته و پاسخها را در قالب مورد نظر وارد میکند. مهمترین دستاورد این روش آن است که ذهن معمار نرمافزار حین تصمیمگیری منظمتر شود. از طرفی بلافاصله میتواند مستند را با دیگر اعضای تیم به اشتراک گذاشته و قبل از انعقاد تصمیم نظر آنها را بگیرد. ما در سالهای اخیر برای مستندسازی از Confluence بهره میگیریم. با این ابزار اعضای تیم میتوانند نظرات خود را به صورت Inline Comment با معمار نرمافزار تبادل کنند. یعنی مستند بخشی از فرایند تصمیمگیری است و نه فقط خروجی آن.
البته این شیوه تبادل نظر برای برخی از موضوعات پیچیده و چند وجهی کارآمد نیست. در این موارد از جلسات تصمیمگیری گروهی استفاده میکنیم. ان شاء الله در آینده راجع به ملزومات و ساختار جلسات تصمیمگیری گروهی در زمینه معماری نرمافزار خواهم نوشت.