حالت تاریک
فصل ۳۳ — سهشنبه، ۱۱ نوامبر
روز بعد Brent دوباره روی Unicorn است و یکی از مهندسان level 3 جایی در Midwest برفی به تیم Dick پیوسته. ظرف چند ساعت، رونوشت ایمیل Sarah را میگیرم:
From: Sarah Moulton
To: Bob Strauss
Cc: Dick Landry, Steve Masters, Bill Palmer
Date: November 11, 7:24 AM
Subject: Someone is undermining Project TalonBob، فهمیدهام Bill Palmer، معاون موقت عملیات IT، منبع حیاتی Project Talon را دزدیده.
Bill، از اقدامات اخیرت عمیقاً نگرانم. لطفاً برایمان توضیح بده چرا دستور دادی Brent برگردد خانه؟ این کاملاً غیرقابل تحمل است. هیئتمدیره به ما دستور داده گزینههای استراتژیک را بررسی کنیم.
خواستارم Brent هرچه زودتر به تیم Talon برگردد. لطفاً تأیید کن این پیام را فهمیدهای.
Sarah
واقعاً نگران میشوم که در ایمیلی به رئیس هیئتمدیره شرکت صدا زده شدهام؛ به Steve زنگ میزنم که واضح است از تغییر ظاهری وفاداری Sarah عصبانی است. بعد از فحش زیر لب، اطمینان میدهد خودش رسیدگی میکند و من طبق برنامه ادامه دهم.
در جلسهٔ روزانهٔ stand-up Unicorn، William خوشحال به نظر نمیرسد. «خبر خوب این است که از دیشب، اولین گزارش promotion مشتری را تولید کردهایم و بهنظر درست کار میکند. اما کد پنجاه برابر کندتر از انتظارمان اجرا میشود. یکی از الگوریتمهای clustering آنطور که فکر میکردیم parallelize نمیشود، پس runهای prediction حتی برای مجموعهٔ دادهٔ تست مشتری کوچکمان بیش از بیستوچهار ساعت طول میکشد.»
غرید و ناله دور اتاق میچرخد.
یکی از developerها میگوید: «نمیتوانیم brute force بزنیم؟ سختافزار بیشتر بریزیم روی مشکل. با compute server کافی، run time را پایین میآوریم.»
«شوخی میکنی؟» Wes با ناامیدی میگوید. «فقط برای بیست تا از سریعترین سرورهایی که پیدا کردیم بودجه داشتیم. برای رسیدن run time به جایی که لازم داریم بیش از هزار سرور لازم است. یعنی بیش از یک میلیون دلار سرمایهٔ خارج از بودجه!»
لبهایم را جمع میکنم. Wes حق دارد. Phoenix از قبل خیلی از بودجه گذشته، و دربارهٔ مبلغی اینقدر بزرگ که تأییدش غیرممکن است صحبت میکنیم، بهویژه با وضعیت مالیمان.
«سختافزار جدید لازم نداریم،» developer جواب میدهد. «همهٔ این تلاش را کردیم compute image بسازیم که deploy کنیم. چرا به cloud نفرستیمشان؟ صدها یا هزاران compute instance هر وقت لازم داریم spin up کنیم، وقتی تمام شد tear down کنیم، و فقط برای compute time مصرفشده بپردازیم.»
Wes به Brent نگاه میکند که میگوید: «ممکن است. از قبل virtualization را برای بیشتر محیطهایمان استفاده میکنیم. نباید خیلی سخت باشد تبدیلشان کنیم تا روی cloud computing provider اجرا شوند.»
لحظهای بعد اضافه میکند: «میدانی، جالب میشود. همیشه میخواستم چنین چیزی امتحان کنم.»
هیجان Brent مسری است.
شروع میکنیم taskها را برای بررسی امکانسنجی assign کنیم. Brent با developerای که ایده را پیشنهاد داده برای prototype سریع team up میکند تا ببینند اصلاً ممکن است یا نه.
Maggie که آنقدر به Unicorn علاقه پیدا کرده که معمولاً در stand-upهای روزانه حاضر است، داوطلب میشود pricing را بررسی کند و به همردههایش در صنعت زنگ بزند ببیند کسی قبلاً این کار را کرده و vendor پیشنهادی دارد.
یکی از security engineerهای John interrupt میکند: «فرستادن دادهٔ مشتری به cloud ممکن است ریسکهایی داشته باشد مثل افشای تصادفی دادهٔ خصوصی یا hack شدن آن compute serverها توسط کسی غیرمجاز.»
«فکر خوبی است،» میگویم. «میتوانی top riskهایی که باید دربارهشان فکر کنیم را لیست کنی و لیست countermeasure و controlهای بالقوه آماده کنی؟»
در پاسخ لبخند میزند، خوشحال که پرسیده شده. یکی از developerها داوطلب میشود با او کار کند.
پایان جلسه، از payoffهای پیشبینینشدهٔ automate کردن فرآیند deploymentمان شگفتزدهام. developerها میتوانند سریعتر application را scale کنند، و احتمالاً تغییرات کمی از ما لازم است.
با این حال، از همهٔ این هیاهوی cloud computing شدیداً بدبینم. مردم انگار جادویی است که فوری هزینهها را کم میکند. در ذهنم فقط شکل دیگری از outsourcing است.
اما اگر مشکلی که داریم را حل کند، حاضرم امتحان کنم. به Wes هم یادآوری میکنم ذهن باز نگه دارد.
یک هفته بعد، دوباره وقت demo است. همه در فضای تیم Unicorn ایستادهایم. پایان sprint است و Development lead مشتاق است نشان دهد تیم چه کار کرده.
«باورم نمیشود چقدر کار کردیم،» شروع میکند. «بهخاطر همهٔ deployment automation، راه انداختن compute instance در cloud آنقدر که فکر میکردیم سخت نبود. در واقع آنقدر خوب کار میکند که داریم فکر میکنیم همهٔ سامانههای production Unicorn درونسازمانی را به test system تبدیل کنیم و cloud را برای همهٔ production استفاده کنیم.
«هر عصر run گزارش recommendations را شروع میکنیم و صدها compute instance spin up میکنیم تا تمام شود، بعد خاموششان میکنیم. چهار روز گذشته این کار را میکنیم و خوب کار میکند — واقعاً خوب.»
Brent لبخند پهنی روی صورتش دارد، مثل بقیهٔ تیم.
معمولاً نوبت product manager است، اما این بار Maggie ارائه میدهد. واضح است بیش از علاقهٔ معمولی به این پروژه دارد.
یک slide PowerPoint روی projector میآورد. «اینها promotionهای Unicorn تولیدشده برای حساب مشتری من است. همانطور که میبینید، تاریخچهٔ خریدم را نگاه کرده و میگوید لاستیک برفی و باتری پانزده درصد تخفیف دارند. واقعاً به وبسایتمان رفتم و هر دو را خریدم، چون لازم دارم. شرکت پول درآورد، چون همهٔ اینها کالاهایی هستند که موجودی مازاد و حاشیهٔ سود بالا داریم.»
لبخند میزنم. این واقعاً درخشان است.
«و اینها promotionهای Unicorn برای Wes است،» ادامه میدهد و به slide بعدی میرود، با لبخند. «بهنظر میرسد تخفیف روی pad ترمز مسابقهای و additive سوخت گرفتهای. جالبت هست؟»
Wes لبخند میزند. «بد نیست!»
Maggie توضیح میدهد همهٔ این پیشنهادها از قبل در سامانهٔ Phoenix هستند و فقط منتظر بودند functionality promotion بالاخره به مشتریان برسد.
ادامه میدهد: «این پیشنهاد من است: میخواهم campaign ایمیلی به یک درصد مشتریانمان انجام دهم ببینیم چه میشود. Thanksgiving یک هفته دیگر است. اگر چند trial انجام دهیم و همهچیز خوب پیش برود، Black Friday با تمام قوا میرویم، که شلوغترین روز خرید سال است.»
«برنامهٔ خوبی بهنظر میرسد،» میگویم. «Wes، دلیلی هست که نکنیم؟»
Wes سر تکان میدهد. «از منظر Ops، فکر نمیکنم. همهٔ کار سخت انجام شده. اگر Chris، William و Marketing اطمینان دارند کد کار میکند، میگویم بروید.»
همه موافقت میکنند. چند issue مطرح میشود، اما Maggie میگوید تیمش حاضر است تمام شب کار کند تا انجام شود.
درون خودم لبخند میزنم. برای یک بار، فقط ما نیستیم که تمام شب بیدار میمانیم چون چیزی خیلی بد پیش رفته. در واقع برعکس است. مردم تمام شب بیدار میمانند چون همهچیز درست پیش میرفت.
دوشنبهٔ بعد، وقتی به سر کار میروم، دمای هوا بهسختی بالای صفر است، اما آفتاب درخشان میتابد. بهنظر میرسد هفتهٔ عالی برای تعطیلات Thanksgiving پیشرو باشد. تمام آخر هفته، کمی از دیدن تبلیغات با بابانوئل شگفتزدهام.
وقتی به دفتر میرسم، پالتو سنگینم را روی صندلی میاندازم. وقتی میشنوم Patty وارد دفترم شده، برمیگردم و میبینم لبخند پهنی روی صورتش است. «خبر شگفتانگیز Marketing را شنیدی؟»
وقتی سر تکان میدهم، فقط میگوید: «ایمیلی که Maggie همین الان فرستاده را بخوان.»
لپتاپ را باز میکنم و میخوانم:
From: Maggie Lee
To: Chris Allers, Bill Palmer
Cc: Steve Masters, Wes Davis, Sarah Moulton
Date: November 24, 7:47 AM
Subject: First Unicorn promotion campaign: UNBELIEVABLE !تیم Marketing آخر هفته تا نیمهشب کار کرد و توانستیم campaign تست به یک درصد مشتریانمان انجام دهیم.
نتایج STELLAR بود! بیش از بیست درصد پاسخدهندگان به وبسایتمان رفتند و بیش از شش درصد خرید کردند. این conversion rateهای فوقالعاده بالایی است — احتمالاً بیش از ۵ برابر هر campaign قبلی.
پیشنهاد میکنیم promotion Unicorn را روز Thanksgiving به همهٔ مشتریانمان انجام دهیم. دارم dashboard بالا میآورم تا همه نتایج real-time campaignهای Unicorn را ببینند.
همچنین یادتان باشد همهٔ کالاهای promoteشده حاشیهٔ سود بالا دارند، پس اثر روی bottom line عالی خواهد بود.
PS: Bill، بر اساس نتایج، surge عظیم ترافیک وب انتظار داریم. میتوانیم مطمئن شویم وبسایت از پا نمیافتد؟
کار عالی، همه!
Maggie
«عاشقشم،» به Patty میگویم. «با Wes کار کن ببینید برای handle کردن surge ترافیک چه لازم است. فقط سه روز وقت داریم، زیاد نیست. نمیخواهیم خرابش کنیم و مشتریان بالقوه را به دشمن تبدیل کنیم.»
سر تکان میدهد و میخواهد جواب دهد که گوشیاش میلرزد. لحظهای بعد گوشی من هم میلرزد. سریع پایین نگاه میکند و میگوید: «زن اژدها دوباره حمله کرد.»
«کاش دکمهٔ unsubscribe برای ایمیلهایش داشتم،» Patty میگوید و بیرون میرود.
نیم ساعت بعد، Steve یادداشت تبریک به کل تیم Unicorn فرستاد که همه دوست داشتند بخوانند. شگفتآورتر، پاسخ عمومی هم به Sarah فرستاد و خواستار شد «قلدر بازی و دردسر درست کردن» را متوقف کند و «هرچه زودتر ملاقاتم کن.»
باز هم ایمیلهای عمومی رفتوبرگشت بین Sarah، Steve و Bob متوقف نشد. دیدن Sarah که چاپلوسی میکند برای Bob، رئیس جدیدمان، ناجور و ناراحتکننده بود. انگار Sarah اصلاً اهمیت نمیدهد چقدر آشکار است و چند پل میسوزاند.
وارد اتاق جلسه میشوم برای ملاقات با John دربارهٔ حل همهٔ issueهای SOX-404 و امنیت Unicorn. پیراهن Oxford راهراه و جلیقه پوشیده، کامل با cufflink. انگار تازه از عکاسی Vanity Fair آمده، و فکر میکنم هر روز سرش را میتراشد.
«شگفتزدهام چقدر سریع fixهای امنیت Unicorn integrate میشوند،» میگوید. «در مقایسه با بقیهٔ Phoenix، fix کردن issueهای امنیت Unicorn breeze است. cycle time آنقدر کوتاه است که یک بار fix را ظرف یک ساعت گذاشتیم. معمولاً ظرف یک یا دو روز fix میگیریم. در مقایسه با این، remediation issueهای Phoenix مثل کشیدن دندانهای خودمان بدون بیحسی است. معمولاً باید یک quarter منتظر میماندیم تا تغییر معناداری انجام شود، و از همهٔ hoopهای لازم برای emergency change order رد شدن تقریباً ارزش دردسر را نداشت.
«واقعاً،» ادامه میدهد، «patching آنقدر آسان است چون هر چیزی در production را با یک لمس دکمه rebuild میکنیم. اگر خراب شد، از صفر دوباره میسازیم.»
سر تکان میدهم. «من هم از cycle timeهای سریع Unicorn شگفتزدهام. با Phoenix، فقط یک بار در quarter deployment تمرین و practice میکردیم. فقط در پنج هفتهٔ گذشته، بیش از بیست deployment کد و محیط Unicorn انجام دادهایم. تقریباً routine حس میشود. همانطور که گفتی، برعکس Phoenix است.»
John میگوید: «بیشتر reservationهایی که دربارهٔ Unicorn داشتم دیگر معتبر بهنظر نمیرسند. check منظم گذاشتهایم که developerهایی که دسترسی روزانه به production دارند فقط read-only access داشته باشند، و پیشرفت خوبی در integrate کردن security testهایمان به procedureهای build داریم. نسبتاً مطمئنم هر تغییری که روی امنیت داده یا ماژولهای authentication اثر بگذارد سریع catch میشود.»
به عقب تکیه میدهد و دستها را پشت سرش گره میزند. «از اینکه چطور assurance امنیت Unicorn بهدست بیاوریم وحشت داشتم. تا حدی چون آنقدر عادت داریم application security review یک ماه طول بکشد. در emergency، مثل پاسخ به audit با اولویت بالا، گاهی ظرف یک هفته turn around میکردیم.
«اما ایدهٔ همگام ماندن با ده deploy در روز؟» ادامه میدهد. «کاملاً دیوانگی! اما بعد از مجبور شدن به automate کردن security testing و integrate کردنش به همان فرآیندی که William برای automated QA testing استفاده میکند، هر بار developer کد commit میکند test میکنیم. از خیلی جهات، visibility و code coverage بهتری از هر application دیگر شرکت داریم!»
اضافه میکند: «باید بدانی آخرین issueهای SOX-404 را بستیم. توانستیم به auditorها ثابت کنیم، بهلطف فرآیندهای change control جدیدی که گذاشتی، همهٔ controlهای فعلی کافی هستند و finding تکراری audit سهساله بسته شد.»
با لبخند اضافه میکند: «تبریک Bill. کاری کردی که هیچکدام از predecessorهایت نتوانستند: بالاخره auditorها را از سرمان برداشت!»
به شگفتی، هفتهٔ کوتاه روان پیش میرود. قبل از اینکه همهٔ چهارشنبه برای تعطیلات Thanksgiving بروند، campaign بزرگ Unicorn آماده است. performance کد هنوز ده برابر کندتر از نیازمان است، اما فعلاً مشکلی نیست چون میتوانیم صدها compute instance در cloud spin up کنیم.
یک showstopper واقعی داشتیم وقتی QA فهمید کالاهایی recommend میکردیم که out of stock بودند. فاجعه میشد، چون مشتریان با هیجان روی promotion کلیک میکردند و فقط «backordered» میدیدند. باورنکردنی است Development ظرف یک روز fix ساخت و ظرف یک ساعت deploy شد.
ساعت ۶ بعدازظهر است و وسایلم را جمع میکنم و به آخر هفتهٔ طولانی نگاه دارم. همهٔ آن را بهدست آوردهایم.