یک بکلاگ بینقص در دست داشتم و یک تیم توسعه (متشکل از یک هوش مصنوعی کدنویس) آماده بود. فکر میکردم سختترین بخش کار تمام شده. اشتباه میکردم.
وقتی اولین نسخه کد را اجرا کردم، با یک فاجعه روبرو شدم. ربات یک جسد متحرک بود. به جای آن سفر کاربری زیبا و تعاملی که طراحی کرده بودم، فقط یک پاسخ خشک و بیربط میداد: "در حال حاضر فقط میتوانم لینکها را تحلیل کنم." هیچ دکمهای وجود نداشت. هیچ چیز کار نمیکرد.
اینجا بود که نبرد من با ارواح نامرئی ماشین شروع شد. ساعتها به لاگهای بیمعنی GitHub Actions خیره شده بودم. کد پایتون به نظر درست میآمد. پس مشکل کجا بود؟
رد پاها ما را به یک جای عجیب رساند: Cloudflare Workers. پلی که قرار بود تلگرام را به کد ما وصل کند، شکسته بود. مشکل این بود که Worker ما Stateless بود. یعنی با هر پیام جدید، همه چیز را فراموش میکرد. نمیتوانست یک گفتگوی چند مرحلهای را به خاطر بسپارد. ساعتها صرف بازنویسی کد کردم تا با استفاده از حافظه موقت (KV)، به این ربات یک حافظه کوتاهمدت بدم. اما باز هم کار نکرد.
در اوج ناامیدی، وقتی داشتم برای هزارمین بار همه چیز را چک میکردم، متوجه یک چیز مسخره شدم. هر بار که ربات را تست میکردم، یک Action در برنچ اشتباهی در گیتهاب اجرا میشد! تمام کدهای جدید و هوشمند ما در شاخه feature/interactive-worker بود، اما Worker داشت نسخه قدیمی کد را از شاخه main اجرا میکرد.
جواب، یک خط کد احمقانه بود که در تنظیمات اولیه کپی کرده بودم: ref: 'main'. یک اشتباه تایپی که ساعتها وقت ما را تلف کرده بود. با تغییر آن به شاخه درست، فکرمیکردم همه چیز تمام شده
اما نه
با اجرای مجدد، این بار با یک خطای جدید در لاگها مواجه شدم: IndentationError. آخرین شوخی بیرحمانه روزگار. یک خطای تورفتگی ساده در کد پایتون که به خاطر کپی و پیستهای متعدد ایجاد شده بود.
با اصلاح آن، با دستهایی که کمی میلرزید، دوباره دستور /start را تایپ کردم. چند لحظه سکوت که انگار یک قرن طول کشید...
و بعد، آنجا بودند. دو دکمهی زیبا و درخشان.
یه نفس راحت کشیدم. این فقط اجرای یک کد نبود؛ این تولد یک محصول واقعی (هرچند کوچیک) بود. آن لحظه دوباره به من یادآوری کرد که هیچ نقشه بینقصی از برخورد با واقعیت جان سالم به در نمیبرد. ساختن، یعنی همین کلنجار رفتنهای کلافهکننده برای رسیدن به یک لحظه کوتاه و شیرین تکمیل شدن و درست کارکردن. و این، دقیقاً همان چیزی است که ارزشش را دارد.
لینک PRD در notion
لینک پروژه در github