Kendi Güvenlik Anahtarımı Devre Dışı Bıraktığım Gün

İlk canlı işlem botumun geçmişinin bir yerinde, gurur duymadığım bir commit var. İki kelimelik. Çalışan sistemin tam ortasında, bir sorunu ortadan kaldırmak için, hesabı koruması gereken güvenlik mekanizmasına uzandım ve şunu yazdım: if False.

İşe yaradı, bir duman alarmını kapatmanın “işe yaradığı” anlamda. Alarm sustu. Alarmın gözlediği şey susmadı.

Tetiklenmeyi bir türlü bırakmayan koruma

En başında bir şeyi doğru yapmıştım: canlı bota günlük zarar limiti koymuştum. Hesap tek bir günde fazla düşerse, sistemin işlem yapmayı durdurup beni beklemesi gerekiyordu. Bu, en temel devre kesici türüdür ve kâğıt üzerinde tam olarak bir acemiye kurması söylenen türden bir disiplindi.

Sorun şuydu: aslında hiçbir şey yanlış değilken sürekli tetikleniyordu. Bot her nakit parayı bir pozisyona aktardığında, koruma nakit bakiyesinin düştüğünü görüyor ve bunu bir zarar olarak okuyordu. Yani işini yapıyordu, gürültülü ve sürekli bir biçimde, korumanın iddia ettiği zarar koşulunu yaşamayan bir sistemi durduruyordu. Birkaç dakikada bir sebepsiz yere çalan bir alarm güvenlik özelliği değildir; gürültüdür. Ve gürültü, eninde sonunda susturulur.

İki kelimelik hotfix

Ben de onu susturdum. Oturumun ortasında, bot çalışırken, günlük zarar kontrolünü devre dışı bıraktım — if False — ve onu yayına aldım. Durma davranışı kesildi. Bot yeniden serbestçe işlem yaptı. Birkaç dakikalığına bir çözüm gibi hissettirdi.

Çözüm değildi. O proje boyunca verdiğim en tehlikeli kararlardan biriydi ve nedeni konusunda kesin olmaya değer.

Aslında ne yaptım

Koruma tetikleniyordu çünkü ona kötü bilgi besleniyordu — bir pozisyona nakit harcamayı para kaybetmekle karıştırıyordu. Bu gerçek bir hataydı ve gerçek bir düzeltmesi vardı: korumaya satın almak ile kaybetmek arasındaki farkı öğretmek.

Bunu yapmadım. Korumayı kapattım. Bir ölçüm sorununu sanki bir koruma sorunuymuş gibi ele aldım ve onu korumayı kaldırarak çözdüm. Bu, bir duman dedektörünün pilini sürekli öttüğü için çıkarmanın mühendislikteki karşılığıdır. Ötme kesilir. Koruma da öyle.

Devre dışı bırakılmış bir koruma, katlanarak büyüyen bir borçtur

İşte beni o zamanki kadarından çok daha fazla korkutması gereken kısım. Hotfix’ten önce sorunum sadece can sıkıcıydı: beni fazla sık durduran bir koruma. Hotfix’ten sonra sorunum görünmez ve sınırsızdı — gerçek parayla işlem yapan, çalışan hiçbir zarar limiti olmayan canlı bir bot.

Yanlış alarmların görebildiğim bir maliyeti vardı: kesintiye uğrayan işlemler. Devre dışı bırakılmış korumanın göremediğim bir maliyeti vardı — ta ki gerçek bir zararın gelip yoluna duracak hiçbir şey olmadığını keşfedebileceği güne kadar. Görünür, atlatılabilir bir tahrişi, görünmez, açık uçlu bir riskle takas etmiştim ve bunu kırmızı bir ışığın daha hızlı yeşile dönmesi için yapmıştım.

İşte bir güvenlik tedbirini devre dışı bırakmanın baştan çıkarıcılığı budur: maliyet ertelenir. Hemen kötü bir şey olmaz. Fatura, eğer gelirse, daha sonra ve toptan gelir — mümkün olan en kötü anda, ki bu tam da korumanın başa çıkmak için var olduğu andır.

Doğru hamle: korumayı sustur değil, onar

Doğru yanıt sıkıcı olanıydı. Amaçlanan güvenlik tedbiri geçerliydi, ama onu besleyen ölçüm ve muhasebe girdileri bozuktu. Yani girdiyi düzeltirsin: onu besleyen sinyalleri ayırırsın, böylece nakdin pozisyonlara olağan akışına değil, gerçek zararlara tepki verir. Koruma gerçek bir zararı normal bir alımdan ayırt edebilir hale gelince, kurt geliyor diye bağırmayı bıraktı — ve gerçekten önemli olacak zararlar için orada, sapasağlam durdu.

Bundan çıkardığım kural neredeyse utanç verici derecede basit ve artık onu mutlağa yakın bir şey olarak görüyorum: bir güvenlik mekanizması kapalıyken işlem yapmaya devam etmezsin. Bir koruma yanlış yere tetikleniyorsa, onu değiştirmeden veya devre dışı bırakmadan önce girdilerini ve kendi mantığını teşhis et — ve korumasız çalışmak yerine, devam etmeden önce onu düzelt veya değiştir.

Bir korumanın bütün amacı, orada olmadığın andır

Bunun otomatik bir sistem için elinle çalıştırdığın hemen her şeyden daha fazla önem taşımasının bir nedeni var. Canlı bir bot sen uyurken, işteyken, var olduğunu yarı yarıya unutmuşken çalışır. Güvenlik mekanizmaları aslında onu izlediğin anlar için değildir — o zaman onlara pek de ihtiyacın yoktur. Onlar izlemediğin anlar içindir: gece 4’teki keskin hareket, yalnızca bir tatilde tetiklenen hata, masadan uzaklaştığın doksan saniyede açılan zincirleme çöküş.

Bugün bir can sıkıntısını aşmak için bir korumayı devre dışı bıraktığında, tam da o anlara karşı borçlanıyorsun. İzlenmeyen saatin sakin bir saat olacağına bahse giriyorsun. Piyasa o bahsi adil koşullarla sunmaz.

O iki kelimelik commit’i bir tür uyarı etiketi gibi aklımda tutuyorum. if False dünyadaki en kolay düzeltmedir ve çoğu zaman hiç de bir düzeltme değildir — görebildiğin bir sorunu göremediğin bir felakete dönüştürmenin bir yoludur.

— Sinyal yok, getiri yok, yatırım tavsiyesi değildir.