HealthCare.gov बचाव के 10 साल
(pauladamsmith.com)- 18 अक्टूबर 2013 को, लॉन्च के तुरंत बाद ठप पड़ गए HealthCare.gov को फिर से खड़ा करने के लिए एक छोटी टेक टीम ने White House में पहली ऑन-साइट जांच शुरू की, और इस काम को बाद में “tech surge” कहा गया
- साइट 1 अक्टूबर 2013 को सार्वजनिक हुई थी, लेकिन ठीक से काम नहीं कर रही थी, और उसी दिन शुरू हुए federal government shutdown के कारण बाहरी मदद 17 अक्टूबर के बाद ही लगाई जा सकी
- पहले दिन टीम ने White House, HHS, CMS, Exchange Operations Center और CGI दफ्तरों का क्रम से दौरा करते हुए contracts, components, business rules और deployment प्रक्रियाओं में उलझे बड़े सिस्टम की bottlenecks पहचानीं
- मौके पर manual testing, लंबी रात की deployments और rollbacks, धीमी resource provisioning, schema-रहित core data layer और real-time monitoring की अनुपस्थिति बड़े risks के रूप में सामने आए
- CGI दफ्तर में कुछ servers पर New Relic सीधे install करने के बाद latency, error rate और request count पहली बार दिखने लगे, और इसके बाद करीब ढाई महीनों तक बचाव कार्य बढ़ता गया तथा साइट सुधारने में योगदान देता रहा
18 अक्टूबर 2013, बचाव कार्य की शुरुआत
- HealthCare.gov recovery का काम शुक्रवार, 18 अक्टूबर 2013 को सुबह 7:15 बजे White House West Wing के प्रवेश द्वार के पास इकट्ठे हुए एक छोटे समूह से सचमुच शुरू हुआ
- शुरुआती समूह में Todd Park, Brian Holcomb, Gabriel Burt, Ryan Panchadsaram, Greg Gershman और Paul Smith थे, और उसी दिन बाद में Mikey Dickerson लंबे speakerphone call के जरिए शामिल हुए
- कुछ लोग सरकार के बाहर से आए थे और कुछ उस समय सरकार में काम कर रहे थे, लेकिन सभी startup या बड़े tech organizations का अनुभव रखने वाले तकनीकी विशेषज्ञ थे
- उस समय America के CTO Todd Park ने इन्हें HealthCare.gov बनाने वाले सरकारी कर्मचारियों और contractors की team को मजबूत करने के लिए चुना था
- मिशन “घुड़सवार सेना की तरह धावा बोलने” वाला नहीं था, बल्कि पहले से दबाव और तनाव में चल रहे现场 में चुपचाप जाकर जानकारी जुटाने और आकलन करने वाली low-profile support जैसा था
- Todd Park ने कहा कि अगले 30 दिन अहम हैं, और लक्ष्य open enrollment period खत्म होने की तारीख 31 मार्च 2014 तक 70 लाख लोगों का enrollment कराना था
Shutdown और launch failure से बना खालीपन
- HealthCare.gov 1 अक्टूबर 2013 को launch हुआ, लेकिन ठीक से काम नहीं कर रहा था, और उसी दिन federal government shutdown शुरू हो गया
- Shutdown की वजह से HealthCare.gov core team के बाहर के लोग मदद करने के लिए अंदर नहीं आ सके
- इस बीच खबरें shutdown और धीरे-धीरे बढ़ती launch disaster से भरी रहीं, और information gap, अटकलें और चिंताएं बढ़ती गईं
- White House यह समझ नहीं पा रहा था कि HealthCare.gov में क्या गड़बड़ है, और अगर साइट fail होती तो Affordable Care Act के benefits लाखों लोगों तक पहुंचाने का मुख्य माध्यम डगमगा सकता था
- Shutdown 17 अक्टूबर को खत्म हुआ, और बाहरी tech team तभी वास्तविक स्थिति देख पाई और काम शुरू कर सकी
पहले दिन सुबह समझ आई सिस्टम की बड़ी तस्वीर
- टीम ने White House Navy Mess में breakfast के बाद Chief of Staff office में जाकर Denis McDonough से मुलाकात की
- Denis McDonough ने सीधे पूछा, “क्या आप इसे ठीक कर सकते हैं,” और team के कुछ सदस्यों ने तनाव में “हां” जवाब दिया
- इसके बाद वे HHS headquarters, Hubert H. Humphrey Building गए और CMS प्रमुख Marilyn Tavenner तथा उनके staff से मिले
- इस बैठक में HealthCare.gov की architecture, मुख्य functional components, CMS leadership को ज्ञात failure points और high-level performance problems साझा किए गए
- CMS leadership में health policy experts और administrators थे, इसलिए दी गई जानकारी मुख्यतः साइट के business metrics और high-level performance explanations जैसी थी
- सुबह के बाद के हिस्से में वे Maryland के Woodlawn स्थित CMS headquarters गए और Michelle Snyder, Henry Chao, Dave Nelson समेत HealthCare.gov leadership से मिले
- यहां deployment issues, bottlenecks, वे points जहां users साइट पर “अटक” रहे थे, MarkLogic XML database, deployment architecture और server types की जानकारी धीरे-धीरे सामने आई
XOC में सामने आई operational reality
- दोपहर में वे Columbia, Maryland के Exchange Operations Center, यानी XOC गए
- XOC HealthCare.gov operations के लिए mission-control-style hub था, और टीम ने वहां साइट को सीधे संभालने वाले technologists की बातें सुनीं
- मौके पर दिखी समस्याएं शुरुआती अनुमान से कहीं ज्यादा गंभीर थीं
- source code changes को लेकर trust की कमी थी
- साइट के कई हिस्से जटिल code generation procedures से बने थे, और teams के बीच बहुत सावधानी से coordination की जरूरत थी
- testing ज्यादातर manual process थी
- releases और deployments के लिए रात में लंबे downtime की जरूरत होती थी, और failure होने पर लंबा rollback करना पड़ता था
- core data layer में schema नहीं था
- hosting resource provisioning धीमी थी और automated नहीं थी
- APM तो दूर, CPU, memory, disk और network जैसे basic metrics भी team को दिख सकें, इस रूप में मौजूद नहीं थे
- इस समय तक team ने स्वीकार कर लिया कि स्थिति शुरुआती अनुमान से बहुत खराब है, और Paul Smith ने Moleskine notebook में सुनी हुई बातें जल्दी-जल्दी लिख लीं
CGI office में New Relic जोड़ने वाली रात
- शाम को वे Virginia के Herndon स्थित CGI office गए
- CGI HealthCare.gov का prime contractor था, और team ने leadership तथा tech team से मिलकर सवाल पूछे
- इस मुलाकात में बाहरी tech team के लिए CGI team का trust हासिल करना अहम था
- CGI team दबाव में थी और थक चुकी थी
- rescue team ने जोर देकर कहा कि वे दोष देने नहीं, मदद करने आए हैं
- उन्होंने high-traffic websites के अनुभव के आधार पर अपनी engineering क्षमता दिखाने की कोशिश की
- मुख्य सवाल था, “साइट में क्या गड़बड़ है, और आपको यह कैसे पता है,” लेकिन CMS और CGI ज्यादातर यह नहीं दिखा पाए कि system के अंदर कौन-से specific components अपेक्षा के अनुसार काम नहीं कर रहे थे
- टीम ने सुझाव दिया कि परिचित APM-style monitoring service New Relic को कुछ servers पर install करके देखा जाए
- सामान्य release procedure को bypass करके चुने गए कुछ servers पर agent सीधे install किया गया, और CMS leader ने यह पुष्टि करने के बाद approval दिया कि New Relic license पहले से मौजूद है
- आधी रात के करीब तक रुके लोगों ने changes लागू किए, और conference room screen पर New Relic admin screen में चुने गए “red shard” servers जल्द ही metrics भेजने लगे
- पहली बार request latency spikes, error rate और requests per minute जैसे real-time operational metrics दिखे, और system की वह स्थिति सामने आई जो पहले लगभग अदृश्य थी
- इन metrics की वजह से business metrics और system state को जोड़कर देखने, और सबसे बड़ा सुधार लाने वाले fixes और actions को prioritize करने का आधार मिला
18 घंटे के पहले दिन के बाद
- Herndon से निकलने के बाद team ने सुबह करीब 2 बजे शांत White House Roosevelt Room में संक्षिप्त retrospective किया
- इस समय तक team ने मान लिया कि समस्या ऐसी नहीं है जो थोड़े समय की सलाह से खत्म हो जाएगी, और साइट के recover होने तक कुछ समय तक उन्हें इसी काम में लगे रहना होगा
- कुछ घंटे सोने के बाद वे अगली सुबह फिर Herndon के लिए रवाना हुए
- पहले दिन का schedule करीब 18 घंटे का था, और इसके बाद भी ऐसे ही marathon sessions जारी रहे
- December के अंत तक करीब ढाई महीनों में tech surge बढ़ा, नए team members जुड़े, और इसने HealthCare.gov सुधारने में मदद की
- उस साल लाखों लोगों ने health insurance coverage में enrollment कराया, और कई लोगों के लिए यह पहली बार था
1 टिप्पणियां
Hacker News की रायें
मूल इरादा यह था कि हर राज्य अपना खुद का exchange चलाए, और जिन राज्यों ने मना किया उनके निवासी ही federal exchange का इस्तेमाल करें
शुरुआत में 36 राज्यों ने अपना exchange नहीं बनाया था 0, और अभी लगता है कि D.C. समेत 20 राज्य अपना marketplace चला रहे हैं 1
2013 का government shutdown, जिसने HealthCare.gov की state team के बाहर के लोगों को मदद के लिए अंदर आने से रोक दिया था, Senator Ted Cruz ने ACA में बाधा डालने के उद्देश्य से lead किया था 2
मुझे लगता है कि अमेरिका का “हर राज्य अपने-आप में स्वतंत्र है” वाला सिद्धांत कभी-कभी बहुत आगे चला जाता है
उन्हें चिंता थी कि federal healthcare system आखिरकार universal healthcare की ओर ले जाएगा, और समझौता हासिल करने के बाद उन्होंने कानून के मर जाने की उम्मीद में exchange implementation से इनकार कर दिया
लेकिन कानून मरा नहीं, और वे अब भी इससे नाखुश हैं
federal funds को state-level block grants के रूप में सौंपने, और TANF जैसे programs तथा eligibility screening को राज्यों के जिम्मे करने के परिणामस्वरूप 1, federal budget के हर $1 का वास्तविक सहायता में बदलने की efficiency, साथ ही सहायता पाने वाले लोगों की संख्या और राशि, काफी खराब हो गई
ACA के state marketplace का आधार मुझे नहीं पता, लेकिन इतिहास में जब राज्यों को बीच में लाया गया है, तो middleman के लिए program बिगाड़ने और पैसा कहीं और मोड़ने की गुंजाइश बढ़ी है
उदाहरण के लिए Texas ने Medicaid expansion के लिए federal government से मिलने वाले सालाना $5–6 billion के free money को ठुकरा दिया था 2
कई बार ऐसी खबरें आई थीं कि किसी insurer को इलाज पर बहुत ज्यादा खर्च करने वाले थोड़े-से patients की वजह से नुकसान हुआ, और जब वह लागत इतनी बढ़ गई कि कीमतें बढ़ानी पड़ीं, तो कोई भी वह product खरीदना नहीं चाहता था
हाल ही में मैंने वे articles ढूंढे, लेकिन अब नहीं मिले, इसलिए उलझन है कि कहीं यह सब मेरी कल्पना तो नहीं था
मेरे पास पैसे भी हैं और transaction करने की इच्छा भी, लेकिन कर नहीं सकता, इसलिए यह system failure है
जब इसको ठीक करने के लिए सबको खींचकर लाया गया था, तब इन लोगों के साथ काम करने की यादें अब भी हैं
Gabe को VIM में code करते देखना किसी महान violinist जैसा था, और Mikey के साथ काम करते हुए metrics और SRE की ताकत दिखी
कमरे में मौजूद हर कोई अगले vendor पर उंगली उठा रहा था, वहां से बात बदलकर bottleneck के कुछ हिस्सों को सचमुच ढूंढ निकालने तक पहुंची
कुल मिलाकर, एक टूटे हुए system को बड़े refactoring के लिए offline तक न कर पाने की हालत में ठीक करना किसी jogging करते व्यक्ति की surgery करने जैसा था, और यह सच में बेहद rough experience था
D.C. का एक छोटा startup front landing page संभालने वाले subcontractor के subcontractor के subcontractor जैसा था, फिर भी यह अच्छी याद है कि हम लोगों को healthcare.gov पर 500 error page के बजाय असली page तक पहुंचा पाए
अगर मेरी याद सही है, तो यह Jekyll इस्तेमाल करने वाले एक single server और एक backup की वजह से था
आज की भाषा में यह “static page generation” तरीका था, इसलिए इसे छोटे hardware पर भी host किया जा सकता था
उस समय इसे काफी advanced tactic माना जाता था, और शायद आप इसी को याद कर रहे हैं
मेरी जानकारी में federal exchange खुलते ही वह site पूरी तरह replace हो गई थी, और landing page खुद personal information लेता या process नहीं करता था, इसलिए उसे serve करने में कोई बड़ी मुश्किल नहीं थी
सब कुछ तब रुका जब users ने सच में insurance products खोजने की कोशिश शुरू की
Development Seed ने बाद में एक और project भी बनाया जिसे आपने शायद सुना होगा, Mapbox, और आखिर में पूरी company उसी दिशा में shift हो गई
मुझे याद है कि किसी podcast में सुना था कि “backend timeout” failure को error की तरह दिखाने के बजाय, उन्होंने data को email से भेजने और user को “ठीक है, हमें मिल गया। बाद में आकर check करें” बताने का तरीका अपनाया
मुझे यह बहुत smart लगा, और बाद में emergency में इस्तेमाल करने लायक pattern के रूप में याद रख लिया
WebTV में database overload होने पर भी कुछ ऐसा ही हुआ था: database connection की जरूरत वाले अंतिम चरण के mail delivery servers सब बंद कर दिए गए ताकि mail inbound SMTP servers पर queue हो जाए, और बाद में database overload हटने पर उसे flush किया गया
सबक यह है कि transactional तरीके से काम करने के लिए design किए गए लेकिन fail हो रहे system का load घटाने के लिए, queue से process होने वाली batch-oriented processing इस्तेमाल करें
इस विषय पर आया “Go Time” podcast episode शानदार था, और इसमें बताया गया कि साइट के कुछ हिस्सों को serve करने के लिए Go का इस्तेमाल कैसे किया गया
इस episode और podcast की जोरदार सिफारिश करता/करती हूं
https://changelog.com/gotime/154
मैंने सोचा था कि कोई दिलचस्प technical चर्चा होगी, इसलिए click किया, लेकिन tech की बात काफी बाद में आई
इसके बजाय process की behind-the-scenes झलक उम्मीद से कहीं ज्यादा दिलचस्प निकली, और अगले हिस्से का सच में इंतजार है
यह लेख पढ़ना सच में अच्छा लगा
10 साल पहले HN पर वेबसाइट के GitHub source code को बारीकी से खंगालने की बात याद आ गई: https://news.ycombinator.com/item?id=6540993
असल में जो हुआ वह आदर्श नहीं था, लेकिन इस retrospective के अलावा क्या कोई ऐसा material है जो ज्यादा detail में बताता हो कि ठीक-ठीक क्या हुआ और उसे कैसे ठीक किया गया?
इस series के अगले लेख भी मैं देखते रहने वाला/वाली हूं
थोड़ा engineering competence porn जैसा लगता है, लेकिन मुझे ऐसी कहानियां पसंद हैं
कुछ साल पहले मैंने The Phoenix Project पढ़ी थी; वह novelized थी और Agile और DevOps को काफी साफ तौर पर introduce करती थी, लेकिन एक data analyst के रूप में मेरे लिए वह नई और अच्छी थी, और अगर ऐसी ही कोई recommendations हों तो पढ़ना चाहूंगा/चाहूंगी
एक अच्छा अंश यह है कि Dickerson ने control room के ठीक बाहर दीवार पर rules लगा दिए थे
नियम 1: “war room और meetings समस्याएं हल करने की जगह हैं। दोष मढ़ने में creative energy खर्च करने के लिए और भी बहुत-सी जगहें हैं।”
नियम 2: “किसी issue पर बोलने वाला व्यक्ति सबसे senior पद वाला नहीं, बल्कि वह होना चाहिए जो उस issue को सबसे अच्छी तरह जानता हो। अगर management और executives कम accurate जानकारी के आधार पर बोल रहे हों और कोई चुपचाप बैठा रहे, तो हम track से भटक गए हैं, और मैं यह जानना चाहता हूं।” Dickerson ने बाद में समझाया, “managers को रास्ते से हटा दें, तो engineers समस्या हल करना चाहते हैं”
नियम 3: “हमें उन सबसे urgent issues पर focus करना चाहिए जो अगले 24–48 घंटों में हमें नुकसान पहुंचाएंगे।”
हल यह है कि ऐसे काम बार-बार उन्हीं कंपनियों को न दिए जाएं
CGI, IBM जैसी कंपनियां पर्याप्त competent नहीं हैं, यह साफ लगता है; समझ नहीं आता कि ऐसे future contracts में उन्हें bidding ban क्यों नहीं किया जाता
अगर कोई contract बिगाड़ता है, तो उसे अगले 10 साल तक सभी government contracts से बाहर कर दीजिए
तब घटिया output बार-बार घूमता रहने के बजाय हमारे पास सच में काम करने वाली technology होगी
इसलिए छोटी कंपनियों के लिए competition में हिस्सा लेना मुश्किल हो जाता है
या फिर teams को mix कर सकती है
जल्द ही काम लेने वाला कोई बचेगा ही नहीं
“MarkLogic नाम के XML database सहित कुछ specific technologies” — 30 करोड़ लोगों द्वारा इस्तेमाल की जाने वाली core service में XML database?
डरावना है
शायद business rules XML में थे और लगभग read-only थे, जबकि dynamic data relational database में रहा होगा
शायद यह सिर्फ मेरी hopeful guess हो
वह configuration database हो सकता था, लेकिन problem business logic से आई लगती है, तो अपने-आप में वह भी समस्या हो सकती थी