اشتباه اول: نوشتن یک مشخصات بهجای یک جمله
افرادی که قبلاً از نرمافزارهای بد ضربه خوردهاند، معمولاً وقتی سازنده را باز میکنند، یک پاراگراف کامل تایپ میکنند. سیستم نمرهدهی، ترجیحات واحدها، حالت آفلاین، طرح رنگی، همه اینها را قبل از اینکه اولین پاسخ برگردد از پیش مینویسند. این کار حس مسئولیتپذیری میدهد، اما نیست. سازنده جملهی شما را میخواند، آنچه احتمالاً منظورتان است را استنتاج میکند، و در حدود پانزده ثانیه یک برنامه ارائه میدهد — «یک دفترچه تمرین برای صخرهنوردها» به یک لاگ جلسات، یک نمای پیگیری درجهسختی، و یک داشبورد تبدیل میشود، با درجهبندی V برای بولدرینگ و مسیرهای YDS بهعنوان پیشفرض، چون این چیزی است که اکثر صخرهنوردها واقعاً از آن استفاده میکنند. همانجا در برنامه به شما میگوید چه چیزی را انتخاب کرده، تا اگر استثنا هستید بتوانید در یک خط اصلاحش کنید. نوشتن آن پاراگراف از پیش، این مرحله را حذف نمیکند. باز هم یک برنامه دریافت میکنید، باز هم باید آن را بخوانید، و حالا سه دقیقه وقت صرف تایپ محدودیتهایی کردهاید که برنامه به هر حال به شما نشان میداد، آن هم به ترتیبی که واقعاً برای ساخت شما اهمیت دارد.
برنامه یک فرم با جاهای خالی برای پر کردن نیست. متنی روان است، و شما هم با متن روان پاسخ میدهید. «در واقع درجهبندی را Font بگذار، من در اروپا هستم» یک ویرایش کامل است. «یک فیلد شریک/ثبت بیمه اضافه کن، من با افراد مختلف صخرهنوردی میکنم» هم همینطور. هر ویرایش، برنامه را دوباره تولید میکند، نه خودِ ساخت را — شما پیش از شروع بخش پرهزینه در حال هدایت هستید، نه اینکه از نو شروع کنید. تأیید آن برنامه آخرین تصمیمی است که باید بگیرید. هر چه بعد از آن میآید، تولید و راستیآزمایی است.
اشتباه دوم: تماشای فید مانند یک ترمینال هنگکرده
ساخت روی سرور انجام میشود، و آنچه در اینجا به نظر خرابی میرسد تقریباً همیشه یک هشدار کاذب است: کسی به فید فعالیتِ ساکت برای دو دقیقه خیره میشود و فکر میکند گیر کرده. اما اینطور نیست — در مرحلهای است که هر ثانیه خروجی قابلمشاهده تولید نمیکند، و فید دقیقاً به همین دلیل مرحلهای را که در آن هستید برچسبگذاری میکند. میتوانید کل تب را ببندید. اجرا در مرورگر شما زندگی نمیکند.
آنچه واقعاً باید انتظارش را داشته باشید بسته به نوع پروژه خیلی متفاوت است. دفترچه صخرهنوردی — چند صفحه، یک مدل داده محلی، بدون فراخوانی به API خارجی — در کمتر از سه دقیقه تمام میشود، که برای هر چیزی که اساساً «این را ثبت کن، آن را نمودار بکش، فهرستی به من نشان بده» است، معمول است. لحظهای که یک ساخت به بکاند واقعی، احراز هویت، یک پایگاه داده با روابط، و کارهای پسزمینه نیاز داشته باشد، با هشت تا دوازده دقیقه مواجه میشوید، چون حالا تولید و مهاجرت طرح پایگاهداده هم اضافه میشود، و مرحله راستیآزمایی بار دوم روی کد سمت سرور اجرا میشود نه فقط نشانهگذاری. بازیها حتی کندتر هستند، چون به تولید دارایی نیاز دارند: اسپرایتها، افکتهای صوتی، و گاهی یک عبور بصری دوم اگر تلاش اول در اندازهای که قرار است نمایش داده شود درست به نظر نرسد. و بستهبندی بومی، یعنی یک APK واقعاً قابلنصب، نه یک وبویو پیچیدهشده در یک پوسته، کار را به یک زنجیره ابزار واقعی میسپارد. Gradle، امضا، همهی اینها. همین یک مرحله بهتنهایی میتواند پنج تا ده دقیقه به کل زمان اضافه کند، و این همان مرحلهای است که فید ساکت به معنای این است که زنجیره ابزار در حال انجام کارهای مربوط به خودش است، نه اینکه چیزی خراب شده باشد.
هزینهی صادقانهی این مدل این است که بازخورد آنی و حرفبهحرف دیدن کدی که در یک ویرایشگر جاری میشود را از دست میدهید. آنچه جایگزین آن میشود، سیستمی است که با خوابیدن لپتاپ شما و قطع شدن وایفایتان از بین نمیرود، سیستمی که میتوانید از گوشیتان بررسی کنید، و بدون توجه به اینکه شما تماشایش میکنید یا نه، به کار خود ادامه میدهد. برای یک ساخت نود ثانیهای، این معامله تقریباً به چشم نمیآید. برای ساخت دوازدهدقیقهای بکاند، این تفاوت بین دایهداری کردن یک ترمینال و رفتن برای گرفتن یک قهوه است.
اشتباه سوم: اشتباه گرفتن «تولیدشده» با «تمامشده»
این همان بخش پرهزینه است. ساختی که سریع تمام میشود اما بررسی نشده، یک ساخت نهایی نیست؛ پیشنویسی است که تصادفاً اجرا میشود — و همین فاصله میان این دو، جایی است که بیشتر سازندههای سریع سایت به شهرت بد میرسند: فرمهایی بدون پاکسازی ورودی ارسال میکنند و دکمههایی که با صفحهکلید قابل دسترس نیستند. پیش از آنکه این پلتفرم چیزی را «تمامشده» اعلام کند، ایجنتهای تأییدکنندهی جداگانه آن را بازبینی میکنند: کد، امنیت، لینکها، سئو، دسترسپذیری و انطباق با برنامهای که شما تأیید کردهاید. این واقعاً یک بازبینی جداست، نه همان ایجنتی که خروجی خودش را دوباره میخواند و سرش را تکان میدهد.
بررسی امنیتی به دنبال همان مسائل بهظاهر سادهای میگردد که واقعاً در محیط عملیاتی آسیب میزنند: کلید API که در کد سمت کلاینت کامیت شده، فرمی که ورودی را بدون پاکسازی میپذیرد، یا اندپوینتی که به شناسهی کاربر ارسالشده از سمت کلاینت اعتماد میکند بهجای استخراج آن از نشست کاربر. بررسی دسترسپذیری هم یک لینتر نیست که بتوان با یک کامنت خاموشش کرد — نسبتهای کنتراست واقعی و قابلدسترسبودن عناصر تعاملی با صفحهکلید را بررسی میکند.
بررسی انطباق همان چیزی است که کمتر از حد ارزشش دیده میشود. بهراحتی ممکن است یک مرحلهی تولید، بیسروصدا چیزی را که درخواست کردهاید کنار بگذارد — مثلاً همان فیلد «گزارش همراه/بیمه» که در ویرایش برنامهتان بود — که در سه فایل بعدتر از ساخت، بدون تصمیم آگاهانهی کسی، از اولویت خارج شده باشد. بررسی انطباق، برنامهی تأییدشدهی شما را در برابر خروجی واقعی دوباره میخواند و این شکاف را پیدا میکند. وقتی چیزی پیدا شود، رفع آن بهصورت خودکار اعمال و دوباره بررسی میشود؛ شما فهرستی از کارها دریافت نمیکنید، بلکه یا اصلاحی را دریافت میکنید که هرگز نمیبینید، یا از ابتدا چیزی اشتباه نبوده است. جزئیات فنی اینکه هر تأییدکننده دقیقاً چه چیزی را بررسی میکند و وقتی چیزی دو بار پشتسرهم شکست بخورد چه اتفاقی میافتد، در چگونه ساختها خودشان را تأیید میکنند آمده است. نکتهای که ارزش دارد از این بخش با خود ببرید این است: «تمامشده» یعنی تأییدشده، نه تولیدشده. اگر این دو را یکی بدانید، دیر یا زود کلید افشاشده یا دکمهی غیرقابلدسترس را منتشر خواهید کرد.
چیزی که با اجتناب از هر سه اشتباه به دست میآورید
- محصولی کارآمد در یک پیشنمایش واقعی که میتوانید در آن کلیک کنید — یک نمونهی واقعی در حال اجرا با دادههای خودتان، نه اسکرینشاتی از شکل نهایی آن.
- رشتهگفتگویی متصل به آن، جایی که «هدر را تیرهتر کن و یک صفحهی آمار اضافه کن» نسخهی دوم را کنار نسخهی اول میسازد. نسخهی قدیمی ناپدید نمیشود؛ بهعنوان بازگشتپذیر همانجا میماند در حالی که نسخهی جدید جای آن را در پیشنمایش زنده میگیرد.
- دکمههایی که واقعاً کاری انجام میدهند: انتشار زنده، دانلود کد، ساخت نصبکنندههای بومی، ارسال به فروشگاه. نه پنجرههای فروش اضافی که شکل دکمه گرفتهاند.
آن دکمهی دانلود کد ارزش توجه بیشتری دارد، چون همان چیزی است که ابزاری قابلاعتماد برای کارهای واقعی را از ابزاری که فقط برای نمونههای یکبارمصرف استفاده میشود جدا میکند. اگر کد واقعاً متعلق به شماست و میتوانید آن را ببرید، ساختار فایل خوانا باشد، بدون قفلشدگی عجیب فراتر از چیزی که واقعاً خواستهاید، آنگاه پلتفرم باید همچنان اعتماد شما را برای نشست بعدی جلب کند، نه اینکه صرفاً به این تکیه کند که شما از قبل گیر افتادهاید.



