خواهرم یک کسبوکار سگگردانی را از ماشینش اداره میکند. چهارده مشتری، یک تقویم گوگل مشترک که سه نفر بد آن را ویرایش میکنند، و عادت به فرستادن پیامک «دارم میام!» برای هرکسی که نوبت سگش رسیده، که یعنی دو بار فراموش کرده و مجبور شده تماس ناخوشایندی را تحمل کند. پنجشنبه از من خواست «یک اپ، بدون تشریفات» و میخواست تا دوشنبه بعد آماده باشد. گفتم سعی میکنم تا یکشنبه شب چیزی داشته باشم. این گزارشی است که نگه داشتم، چون میخواستم بعداً بدانم واقعاً چه چیزی زمانبر بود در مقابل چیزی که فقط فکر میکردم زمانبر خواهد بود.
جمعه، ۸:۴۰ شب — دستور اولیه
یک ویرایشگر خالی باز نکردم. چت را باز کردم و فقط کسبوکار را توصیف کردم: سگگردان انفرادی، چهارده مشتری تکرارشونده، نیاز است مشتریان صبح روز پیادهروی یک پیامک یادآوری خودکار دریافت کنند، نیاز است یک صفحه ساده وجود داشته باشد که او بتواند مشتری جدید و اسم سگش را در کمتر از سی ثانیه اضافه کند چون معمولاً وسط پارکینگ خانه کسی ایستاده. یک بار گفتم «اپ رزرو» و بلافاصله پسش گرفتم — این اپ رزرو نیست، یک لیست مشتری با یک محرک یادآوری است. دقیقبودن درباره اینکه چه چیزی نیست، در نهایت بیشتر از توصیف اینکه چه چیزی هست اهمیت داشت.
جمعه، ۹:۰۵ شب — برنامه برمیگردد
برنامه سه بخش داشت که نخواسته بودم و فراموششان میکردم:
- راهی برای علامتزدن یک پیادهروی بهعنوان انجامشده، تا یادآوری دوبار فعال نشود
- یک لینک انصراف از پیامک برای رعایت مقررات
- یک نمای روزانه ساده بهجای یک جدول تقویمی، چون یک جدول تقویمی روی موبایل با چهارده ورودی فقط یک دیوار متن ریز است
طی بیست دقیقه بعد، برنامه را سه بار جداگانه بازنویسی کردم، عمدتاً با بازنویسی کلماتی که نیازی به بازنویسی نداشتند. با نگاه به گذشته، این محض عصبیبودن بود — عامل برنامهریزی از همان اول شکل درستی به آن داده بود، و من داشتم جملات را ویرایش میکردم نه محتوا را.
جمعه، ۹:۴۰ شب — اجرای اول
شروعش کردم و تماشا کردم تیم عامل روی مدل مشتری، صفحه نمای روزانه، و کار یادآوری کار میکند. طراحی مثل فرم پذیرش یک مطب دامپزشکی برگشت، که برای این مخاطب واقعاً درست بود — مشتریان خواهرم صاحبان سگ در دهه چهل و پنجاه زندگیشان هستند، نه یک پرزنتیشن جذب سرمایه Series A. تقریباً از روی عادت خواستم با سبک بصری مخالفت کنم قبل از اینکه بفهمم بهتر از هر چیزی که خودم انتخاب میکردم با کاربر واقعی جور در میآید.
جمعه، ۱۰:۳۰ شب — اولین وقفه
بخش پیامکی قبل از اینکه چیز واقعی بفرستد نیاز به یک کلید ارائهدهنده فعال داشت، که رفتار درستی است نه یک باگ، اما فراموش کرده بودم یکی راهاندازی نکردهام. بقیه چیزها همچنان کار میکرد — اپ فقط چیزی را که میخواست بفرستد ثبت میکرد بهجای فرستادنش، که یعنی میتوانستم به ساختن ادامه بدهم بهجای گیرکردن در ثبتنام Twilio ساعت ۱۰:۳۰ شب جمعه. رفتم بخوابم.
شنبه، ۸:۰۰ صبح — گیر واقعی
این همان چیزی بود که واقعاً زمان گرفت. خواسته بودم یادآوریها «صبح همان روز» بروند، و نسخه اول این را به معنای ارسال ثابت ساعت ۷ صبح برای همه مشتریان، صرفنظر از زمان پیادهروی، تفسیر کرده بود. برای پیادهروی ساعت ۹ صبح خوب بود، برای پیادهروی ساعت ۴ بعدازظهر بیفایده. برگشتم به چت و مستقیم گفتم:
یادآوری باید تعداد ساعت ثابتی قبل از زمان برنامهریزیشده خودِ هر پیادهروی فعال شود، نه در یک ساعت ثابت.
رفع مشکل یک تبادل طول کشید. درس آموختهشده درباره ابزار نبود، درباره دستور خودم بود: «صبح همان روز» عبارتی است که برای کسی که آن را میگوید دقیق به نظر میرسد و برای بقیه، از جمله ظاهراً خودم دوازده ساعت بعد، کاملاً مبهم است.
شنبه، ۱۱:۱۵ صبح — خواندن رکورد تأیید
قبل از اینکه به چیز دیگری دست بزنم، بررسی کردم که ساخت خودش را در برابر چه چیزی بررسی کرده بود:
- ذخیره صحیح فرم مشتری
- اجرای کار یادآوری در برابر یک روز آزمایشی از قرارها
- لینک انصراف که واقعاً یک شماره آزمایشی را لغو اشتراک میکرد
هیچچیز در آتش نبود. عادت کردهام قبل از رفتن به دنبال مشکلات، این را بخوانم، چون به من میگوید توجهم را واقعاً کجا بگذارم بهجای کلیککردن تصادفی به امید متوجهشدن چیزی اشتباه.
شنبه، ۲:۰۰ بعدازظهر — پیامک، اینبار واقعی
حساب کاربری ارائهدهنده را راهاندازی کردم، کلید را وارد کردم و یک یادآوری آزمایشی برای خودم فرستادم.
چیز کوچکی است، اما همان لحظهایست که یک پروژه از یک دمو بودن دست میکشد و به چیزی تبدیل میشود که در دنیای واقعی وجود دارد.
شنبه، ساعت ۴:۲۰ بعدازظهر — انتظار برای دامنه
دامنهٔ واقعی او را به سمت آن هدایت کردم و بعد دو ساعت کاری مفید انجام ندادم تا DNS بهروزرسانی شود. آن زمان را صرف تایپ کردن خودم چهارده ردیف واقعیِ مشتری کردم، بهجای اینکه بگذارم او شنبهشب با گوشی تایپشان کند، و با نگاه به عقب، بهترین استفاده از کل آخر هفته همین بود — ورود دادهٔ بیجلوه بر هر مقدار پرداخت اضافه که کسی درخواستش را نداده بود، برتری دارد.
یکشنبه، ساعت ۹:۰۰ صبح — بخشی که نزدیک بود بیش از حد بسازمش
به فکرم رسید که او احتمالاً یک خلاصهٔ هفتگی میخواهد — پیادهرویهای انجامشده، غیبتها، درآمد — و شروع کردم به درخواست یک گزارش خودکار صبح دوشنبه. اما نیمهراه توصیف آن متوقف شدم. او چهارده مشتری دارد و حسابهایش را خودش در یک دفترچه مینویسد. ویژگیِ خلاصهسازی راهحلی برای مشکلیست که او هنوز ندارد. حذفش کردم. میتوانم همان هفتهای که واقعاً درخواستش را داد، در پنج دقیقه اضافهاش کنم، و تا آن زمان فقط سطحی برای بروز اشکال است.
یکشنبه، ساعت ۱:۱۰ بعدازظهر — لینک را برایش فرستادم
او در حالی که در یک پارکینگ ایستاده بود، از گوشیاش یک مشتری اضافه کرد، که این خودِ آزمون واقعیِ مهمتری بود نسبت به هر چیزی که خودم چک کرده بودم.
یکشنبه، ساعت ۶:۴۰ بعدازظهر — چیزی که دفعهٔ بعد از آن صرفنظر میکنم
چیزی که دفعهٔ بعد از آن صرفنظر میکنم:
- سه بار بازنویسی برنامه که چیزی را عوض نکرد
- دو ساعت نگرانی دربارهٔ ارائهدهندهٔ پیامک، حتی قبل از اینکه راهاندازیاش را امتحان کنم
- داشبورد خلاصهای که نزدیک بود بسازم — سریعترین سی دقیقهٔ کل آخر هفته همان زمانی بود که صرف گفتن «نه» به ایدهٔ خودم کردم، بهجای ساختن آن
هر چیزی که واقعاً زمان زیادی گرفت، یا ابهامی واقعی در درخواست خودم بود یا انتظاری اجتنابناپذیر برای سرور DNS کسی دیگر. برای ساخت بعدی، پرامپت را یکبار مینویسم، آن را مثل یک غریبه میخوانم، و به برنامهٔ اول بیشتر از اینبار اعتماد میکنم.



