در مطالعه کتاب Building microservices نوشته sam newman قانونی به عنوان قانون کانوی (conway’s law) مطرح می گردد. در تلاش برای فهم این قانون و ارتباط آن با دنیای نرم افزار به دو قانون دیگر برخورد کردم که مجموعا به این سه قانون، قوانین توسعه نرم افزار گفته می شود. به نظر می رسد که این قوانین برای اولین بار در کتاب Exploring Scrum: The Fundamental نوشته Jeff Sutherland بیان شده است. این متن خلاصه مطالبی است که توانستم درباره این قوانین جمع آوری کنم.
قوانین توسعه نرم افزار:
1. قانون هامفری (Humphrey’s law)
2. قانون زیو (Ziv’s Law)
3. قانون کانوی (Conway’s Law)
1. قانون هامفری
این قانون در واقع یک اصل در روانشناسی است که بیان می کند تفکر آگاهانه درباره ی یک وظیفه یا فعالیت که به صورت ناخودآگاه (خودکار) درآمده است، باعث ایجاد اختلال در آن وظیفه یا فعالیت می گردد.برای مثال می توان می توان تفکر آگاهانه درباره ی تنفس و یا راه رفتن را مثال زد. در دنیای نرم افزار تلاش ما برای گنجاندن فعالیت های واقعی در واقع همان تفکر آگاهانه درباره ی فعالیت ها است.
2. قانون زیو
به بیان این قانون توسعه نرم افزار یک روند غیر قابل پیش بینی دارد. این غیر قابل پیش بینی بودن حتی برای نرم افزارهای مشابه نیز وجود دارد. این قانون این نکته را نیز در بردارد که هر چقدر تحلیل پروژه نیز به خوبی صورت گرفته باشد همچنان این غیر قابل پیش بینی بودن وجود دارد. این قانون اهمیت و توجه به پویا بودن روند توسعه نرم افزار را نشان می دهد. در واقع این قانون ما را به سمت استفاده از روش هایی سوق می دهد که در آنها امکان بررسی و اعمال تغییرات به سرعت در درسترس هستند.
3. قانون کانوی
متن این قانون این گونه است.
Organizations which design systems … are constrained to produce designs which are copies of the communication structures of these organizations
— M. Conway
ترجمه این قانون به این صورت است که ” هر سیستم نرم افزاری آینه گروهی است که آنرا طراحی و پیاده سازی نموده است”. در واقع این قانون بیان می کند که ساختار تیم های نرم افزاری و مخصوصا ارتباط بین اعضای تیم و تیم ها با یکدیگر بر کیفیت نرم افزار نهایی تاثییرگذار است. به عنوان مثال اگر ارتباط بین تیم ها در پروژه های نرم افزاری ضعیف باشد این ضعف در محصول نهایی نیز نمایان خواهد گردید.
منابع:
1. Sam Newman,”Building Microservices: Designing Fine-Grained Systems”, O’Reilly Media, 2015
2. https://www.linkedin.com/pulse/20140712143010-6227721-the-three-laws-of-software-development-humphrey-s-law?trk=mp-reader-card
3. https://www.linkedin.com/pulse/20140719182303-6227721-the-three-laws-of-software-development-ziv-s-law
4. https://www.linkedin.com/pulse/20140728095558-6227721-the-three-laws-of-software-development-conway-s-law?trk=mp-reader-card
5. https://www.simple-talk.com/opinion/opinion-pieces/some-laws-of-software-development/
6. https://www.thoughtworks.com/insights/blog/demystifying-conways-law
7. https://en.wikipedia.org/wiki/The_Centipede’s_Dilemma