منطق ایجنت‌ها › M6 — ساختن سیستم بدون کد
۶.۸ پایدار تدریسی ~۴۵ دقیقه

🧠 خودت یکی بساز

قبل از این فصل: فصل ۶.۲ · فصل ۶.۴ · فصل ۶.۶

در یک نگاه

۶.۸.۱

انتخاب دامنه‌ی کوچک

هفت فصل قبل قطعه‌ها را دادند. این فصل سرِ هم کردنشان است — و مهم‌ترین تصمیمش همین اولی است.

دامنه را کوچک بگیر. کوچک‌تر از آن‌قدری که فکر می‌کنی معقول است. سه معیار:

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

۶.۸.۲

طراحی روی کاغذ

قبل از ساختن هیچ پوشه‌ای، چهار چیز را بنویس. این همان specِ کوچکِ فصل ۲.۴.۲ است، فقط برای یک سیستم:

  1. چه چیزی وارد می‌شود، از کجا؟ (فصل ۶.۶.۲)
  2. چه اتفاقی رویش می‌افتد؟ — قدم‌ها، به ترتیب.
  3. کجا تمام می‌شود؟
  4. و «تمام شد» یعنی چه؟ (فصل ۲.۴.۳) — بدون این، هیچ‌وقت نمی‌دانی سیستم کار کرد یا نه.

روی کاغذ، چون کاغذ ارزان است و پاک‌کردنش هزینه‌ای ندارد. اگر همین چهار سؤال را نتوانستی جواب دهی، ساختنِ پوشه‌ها کمکی نمی‌کند — فقط ابهام را به یک شکلِ مرتب‌تر منتقل می‌کند.

۶.۸.۳

ساختن پوشه‌ها و فایل‌ها

حالا بساز. کم‌ترین چیزی که یک سیستم کامل می‌سازد این است:

می‌توانی از ایجنت بخواهی همین ساختار را بسازد — ولی خودت طراحی‌اش کن. ساختن، کارِ مکانیکی است؛ طراحی، کارِ توست. و چون این کار فایل می‌سازد و نه بازنویسی، از کم‌خطرترین کارهای فصل ۵.۱.۴ است.

به‌خاطر بسپار ساختار را قبل از داشتنِ داده بساز، ولی قانون را بعد از دیدنِ اولین داده نهایی کن. ساختار حدس‌زدنی است؛ قانون نه — قانون باید به موارد واقعی جواب بدهد و موارد واقعی همیشه عجیب‌ترند از آن چیزی که تصور می‌کردی.

۶.۸.۴

نوشتن قانون

سه تا پنج بند، با الگوی «وقتی … ، … — مگر …» (فصل ۶.۴.۲). و برای این سیستمِ اول، این سه بند تقریباً همیشه لازم‌اند:

و قبل از اینکه به قوانینت اعتماد کنی، تستِ ابهام را بگیر: از ایجنت بخواه برای هر بند سه حالت مبهم بگوید. این پنج دقیقه، معمولاً یک دورِ کاملِ خرابکاری را حذف می‌کند.

۶.۸.۵

آزمودن با یک ورودی واقعی

حالا مهم‌ترین قدم. و تأکید روی یک کلمه است: واقعی.

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

حین آزمودن، این چهار چیز را بنویس:

  1. کجا مکث کردی و نمی‌دانستی چه کنی؟
  2. کدام قانون جوابی نداشت؟
  3. چه چیزی در ساختار جا نشد؟
  4. و چه کاری کردی که در هیچ قانونی نوشته نشده بود؟

آن مورد چهارم ارزشمندترین است، چون قانونِ نانوشته‌ای را لو می‌دهد که در سرت بود — و قانونِ نانوشته، دفعه‌ی بعد رعایت نمی‌شود (فصل ۶.۲.۳).

۶.۸.۶

اصلاح دور اول

حالا اصلاح کن — ولی با ترتیبِ درست، چون ترتیبش مهم است:

  1. اول ساختار. اگر چیزی جا نشد، شاخه‌ی کم‌شده را اضافه کن. ساختارِ غلط را با قانون وصله نکن.
  2. بعد قانون. ابهام‌ها را رفع کن و استثناها را اضافه کن.
  3. آخر از همه، نقش یا رویه — و فقط اگر دردش را حس کردی (فصل ۶.۵.۴).

و یک قاعده‌ی خودداری: در دور اول، هر ایرادی را رفع نکن. بعضی ایرادها یک‌بارمصرف‌اند و دیگر تکرار نمی‌شوند؛ اگر برای هر کدام قانونی بنویسی، به فایل قانونِ سی‌بندی می‌رسی که کسی نمی‌خواندش (فصل ۶.۴.۳). منتظر تکرار بمان. چیزی که دو بار اتفاق افتاد، الگوست؛ چیزی که یک بار افتاد، ممکن است فقط یک بار باشد.

و همین‌جا کارِ این ماژول تمام است. سیستمی داری که جا دارد، حافظه دارد، قانون دارد، جریان دارد — و یک بار با واقعیت روبه‌رو شده و از آن جان سالم برده. این تفاوت یک سیستم با یک نقشه است.

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

تمرین (ساختنی + توضیحی)

سیستمت را بساز و به کار بینداز. بعد بنویس:

  1. اولین ورودی واقعی چه چیزی را خراب کرد؟
  2. آن خرابی از ساختار بود، از قانون، یا از جریان؟
  3. چه چیزی را اصلاح کردی — و چه چیزی را عمداً اصلاح نکردی و چرا؟
پاسخنامه — یک دور واقعی، و چرا آن بند آخر مهم‌ترین است

سیستم: پیگیری فاکتورهای پرداخت‌نشده. سه پوشه، سه قانون.

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

علت: ساختار، نه قانون. قانون درست بود برای دو حالتی که تعریف شده بود؛ مشکل این بود که حالتِ سوم وجود داشت و دیده نشده بود. و آن جمله‌ی «بعداً درستش می‌کنم» دقیقاً همان قانونِ نانوشتهی بخش ۶.۸.۵ است.

چه چیزی اصلاح شد: یک حالت سوم اضافه شد — «پرداخت جزئی» — با یک بند در قانون که می‌گوید مبلغِ باقی‌مانده در نام فایل بیاید. یعنی اول ساختار، بعد قانون؛ همان ترتیبِ بخش ۶.۸.۶.

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

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

ذخیره شد