From c7390416423cebc04c52cf5e1577a8e24588284b Mon Sep 17 00:00:00 2001 From: Bel LaPointe Date: Mon, 23 Oct 2023 09:45:31 -0600 Subject: [PATCH] TO 2023 REBRAND --- cv/202001-202310.yaml | 900 +++++++++++++++++++++++++------------ cv/pick_n.sh | 7 + cv/prompts.yaml | 8 + cv/rendered.sh | 10 + headless_homebrew_pdf.sh | 19 +- src/homebrew/homebrew.html | 145 ++---- src/homebrew/homebrew.pdf | Bin 47341 -> 43759 bytes src/homebrew/homebrew.sh | 4 +- src/homebrew/homebrew.tmpl | 14 +- src/homebrew/homebrew.yaml | 60 +-- 10 files changed, 739 insertions(+), 428 deletions(-) create mode 100644 cv/pick_n.sh create mode 100644 cv/prompts.yaml create mode 100644 cv/rendered.sh diff --git a/cv/202001-202310.yaml b/cv/202001-202310.yaml index 2aacbad..a2b3fe2 100644 --- a/cv/202001-202310.yaml +++ b/cv/202001-202310.yaml @@ -1,525 +1,857 @@ +# TODO https://www.linkedin.com/posts/brianjenney_ive-spoken-with-about-500-developers-in-activity-7119717343127117824-I016/?utm_source=share&utm_medium=member_desktop +# > did [x] using [y] which led to [z]. +- when: 2019 + rendered: Decreased backend service's annual outages by 91% and reduced hardware costs by 40% by selecting, training owners on, and migrating without downtime to a different database. + quantity: + - 718 avg outage min per year down to 64 avg outage min per year + - 356 outage minutes 2018 for marauders-map + - 352 outage minutes 2018 for couchbase + - 203 outage minutes 2018 for gobs + - 47 outage minutes 2019 for marauders-map + - 149 outage minutes 2019 for couchbase + - 282 outage minutes 2019 for gobs + - 47 outage minutes 2019 for geni + - 184 outage minutes 2020 for gobs + - 5 outage minutes 2020 for geni + - 48 outage minutes 2021 for couchbase + - 48 outage minutes 2021 for gobs + - 31 outage minutes 2022 for gobs + - 131 outage minutes 2023 for couchbase + - 131 outage minutes 2023 for gobs + - 12 outage minutes 2023 for geni - when: 2020 - what: edits healthcheck as a modular stack monorepo before it was cool that does visibility+remediation - how: [] + rendered: Automated infrastructure patching without customer impact for 30 microservices and 25 database clusters by creating a modular and testable Bash script framework. +- when: 2020 + what: + - edits healthcheck as a modular stack monorepo before it was cool that does visibility+remediation why: - pride-in-craft + grade: c + quantity: + - routinely randomly sampled N ETL + - scanned ~N rows per second vs 3 source systems + - fixed ~N per day + rendered: "Established a healthcheck system to scan X rows per second, resolve drift from upstream systems, and expose findings." - when: 2020 - what: BoQ hosting 2020..2023 - how: [] + what: + - BoQ hosting 2020..2023 why: - pride-in-craft - pride-for-others + grade: c + quantity: + - N text books + - audience of N + - 1 time a week + rendered: "Hosted engineering book club, including book selection and weekly group reflection." - when: 2020 - what: GOBS from p2p to stateless (via redis, killing leveldb) - how: [] + what: + - GOBS from p2p to stateless (via redis, killing leveldb) + - decoupled cache miss rate from releases + - decreased thread scalability + - decoupled disk size service scale + - same team known technology less sentinel operational burden + - decreased error rate from N to N during releases why: - scalability + grade: b + quantity: + - reduced touchpoints per call from N to N + rendered: "Simplified microservice by extracting peer-to-peer layer, decoupling single nodes' performance, availability, and scale from global performance." - when: 2020 - what: nexpose-remediations and blackduck sme - how: [] + what: + - nexpose-remediations and blackduck sme why: - scalability + grade: c + quantity: + - decoupled knowledge of problem space from solution + - implement optional interface with your tribal knowledge and done + - made things like log4j feasible + - scripted tribal knowledge + rendered: null - when: 2020 - what: scale test rems vs re - how: [] + what: + - scale test rems vs re why: - failfast + grade: d + quantity: [""] + rendered: null - when: 2020 - what: mongo sme designed and released rems-mongo - how: [] + what: + - mongo sme designed and released rems-mongo why: - scalability + grade: d + quantity: [""] + rendered: null - when: 2020 - what: re, terminator to nomad - how: [] + what: + - re, terminator to nomad why: - scalability + grade: d + quantity: [""] + rendered: null - when: 2020 - what: design GOBS off of Couchbase - how: [] + what: + - design GOBS off of Couchbase why: - scalability + grade: a + quantity: + - single greatest operational pain, instability cause, financial burden + - horizontal scale on known, stable technology to reduce total team space + - simplified complex system to core requirements + - GOBS on Mongo with Xongo w/ Ryan intern mentor + - for all gobs,geni,maraudersmap,couchbase... + - ...35 outages/722 minutes 18 // geni on cb + - ...21 outages/290 minutes 19 // geni on cb + - ...13 outages/615 minutes 20 + - ...8 outages/88 minutes 21 + - ...13 outages/31 minutes 22 + - ...14 outages/143 minutes 23 + rendered: "Designed a replacement for a system, which yielded 28 outages annually, based entirely on technologies well understood by the team." - when: 2020 - what: REMS migration implementation - how: [] + what: + - REMS migration implementation why: - pride-in-craft + grade: c + quantity: + - no incidents + rendered: null - when: 2020 - what: DRS for REMS - how: [] + what: + - DRS for REMS why: - scalability + - isolation for REMS + grade: c + quantity: [""] + rendered: null - when: 2020 - what: isolation for REMS - how: [] + what: + - FSDef,FSIndex to GOBS from Couchbase why: - scalability + grade: b + quantity: [""] + rendered: null - when: 2020 - what: FSDef,FSIndex to GOBS from Couchbase - how: [] + what: + - Mongo on TLS SME/pilot + - Redis on TLS,Password no downtime migration via middleware why: - scalability + grade: c + quantity: + - 0 incident + - 0 downtime + rendered: null - when: 2020 - what: GOBS on Mongo with Xongo w/ Ryan intern - how: [] + what: + - Mongosback V2 for cron > rundeck + - Mongosback V2.1 autorelease after bake time, indexes why: - pride-in-craft + grade: a + quantity: + - onboarding from copy-paste to 1 line change + - served N teams over N years + rendered: Created custom Python tooling to create, increment, restore, and check for MongoDB database backups for standalone, replicated, and sharded deployments without customer impact, and has been the in-house standard for 21 teams for 4 years. - when: 2020 - what: Mongo on TLS SME/pilot - how: [] - why: - - scalability -- when: 2020 - what: Mongosback V2 for cron > rundeck - how: [] - why: - - pride-in-craft -- when: 2020 - what: REMS+DSCat Mongo SME - how: [] + what: + - REMS+DSCat Mongo SME why: - pride-in-craft + grade: c + quantity: [""] + rendered: null - when: 2021 - what: systems review planning - how: [] + rendered: Developed and owned highly available and reliable data storage and operational tooling. +- when: 2021 + rendered: Mentored 2 intern, 2 new grad, and 4 mid-level engineers on operational tools, best practices for maintainable software, and career development. +- when: 2021 + rendered: Genericized AWS asset management tooling ahead of company-wide mass migration initiative. +- when: 2021 + rendered: Championed disaster recovery by supporting training runs with documentation, tools, and live support across teams and enforced continuous compliance for 17 database clusters with monitoring and alerting. +- when: 2021 + rendered: Lent expertise owning MongoDB across teams by advising on configuration and data models and genericizing disaster recovery tooling for 21 teams. +- when: 2021 + what: + - systems review planning why: - pride-in-craft - pride-for-others + grade: c + quantity: [""] + rendered: null - when: 2021 - what: mentored new hire until he left the team for his starter project (S3) - how: [] + what: + - mentored new hire until he left the team for his starter project (S3) why: - pride-in-craft - pride-for-others + grade: c + quantity: [""] + rendered: null - when: 2021 - what: mentored sr engineer on bash, rundeck, in-house metrics and alerting, ssh... - how: [] + what: + - mentored sr engineer on Bash, rundeck, in-house metrics and alerting, ssh... why: - pride-in-craft + grade: d + quantity: [""] + rendered: null - when: 2021 - what: on-call training with chaos testing, hands-on log perusing - how: [] + what: + - on-call training with chaos testing, hands-on, log perusing + - Mongo multi-phase, multi-timezone interactive training with offline reading and video + online chaos testing + forum for anonymous feedback why: - pride-in-craft - pride-for-others + grade: c + quantity: + - N chaos tests // 2021-06-16, 2022-08-08, 2023.02.01, 2019-01-23, 2019-08-09, 2019-09-04 + - N systems // re, geni, gobs, terminator, is + - N participants + rendered: "Administered on-call training, including 6 chaos tests gamedays across 5 systems." - when: 2021 - what: s2se; scripted Galera with safety for multi-team - how: [] + what: + - s2se; scripted Galera with safety for multi-team // https://qualtrics.slack.com/archives/C016VAW2L04/p1613540701066600 why: - scalability - pride-in-craft + grade: b + quantity: + - 3 teams // https://qualtrics.slack.com/archives/C016VAW2L04/p1613540701066600 // vocalizedb=3*8, dis=3*8, me=5*3*8 + - spreadsheet with N steps // https://docs.google.com/spreadsheets/d/1JsxGdEWlGOFivJZMOBMmlkaoqRz3gTJB7NtjVGI3q-I/edit#gid=644182888 // https://qualtrics.slack.com/archives/C016VAW2L04/p1612567987267700 // https://gitlab-app.eng.qops.net/data-store/orchestration/runbooks/-/blob/8d30ca087c6f1a5518515b98e7948b48aac6d08a/Maintenance/Galera_to_TLS/upgrade.sh + - "Scripted no-downtime database reconfiguration, which reduced 44 manual steps per node to 3 and was leveraged by 3 teams to update 168 instances." + - our N clusters + rendered: "Scripted no-downtime database reconfiguration, which was leveraged by 3 teams to update 168 instances." - when: 2021 - what: dr backup check to monitor s3 compliance w/ 19 teams onboarded and eventually handed to dbteam - how: [] + what: + - dr backup check to monitor s3 compliance w/ 19 teams onboarded and eventually handed to dbteam why: - scalability + grade: b + quantity: + - 16 teams // s3-backup-check $ git grep '^[a-z].*:' $(git rev-list --all) | grep :config.*yaml: | sed 's/.*:config.//' | sed 's#/.*##' | sort -u | tr '\n' ' '; echo .examples action-planning analytics-engine datastore dbteam devplat-mongo dp-orchestration dp-orchestration.yaml:geni-mongo-$DC: dp-orchestration.yaml:rdb-$DC-i: dp-orchestration.yaml:rdb-$DC-s: dtool exh geni.yaml:backups: geni.yaml:geni: geni.yaml:rdb: jfe job-platform orch pxapp statwing ta tickets workflow-triggers + - parallelized to P=3 and trivially configurable + - caught N issues backups failing causes for us + rendered: Founded the in-house standard system to continuously verify 16 teams' compliance with disaster recovery requirements. - when: 2021 - what: Mongosback V2.1 autorelease after bake time, indexes - how: [] - why: - - pride-in-craft -- when: 2021 - what: REMS on SSDs analysis, budget proposal, approval, deploy, mock traffic - how: [] + what: + - REMS on SSDs analysis, budget proposal, approval, deploy, mock traffic why: - scalability + grade: b + quantity: + - N% more cost but N% less shards + - https://docs.google.com/document/d/1Yh-HrA4xuaZD4CMFJwqHjir_B4qLIPbXEUmw9m5azy8/edit#heading=h.uw3h16ap7r5f + rendered: "Forecasted financial and complexity cost to launch on cheap hardware yielded $N savings over 2 years. // compute $ and include dev cost of setting up new shards, say .5 dev week so 1k=100k/52/2 per shard" - when: 2021 - what: Took REMS migration implementaion back from handoff and reduced ETA from inf to 3w at max speed w/ visibility and parallelism - how: [] + what: + - Took REMS migration implementaion back from handoff and reduced ETA from inf to 3w at max speed w/ visibility and parallelism why: - pride-in-craft + grade: b + quantity: [""] + rendered: null - when: 2021 - what: found Go likes lots of small > few big RAM nodes - how: [] + what: + - found Go likes lots of small > few big RAM nodes why: - pride-in-craft + grade: d + quantity: [""] + rendered: null - when: 2021 - what: | - REMS quality of life - * idempotency test - * brand/user/issuer/byte limiting - * squishing - * lazy JSON parsing - * resumable jobs - * heartbeating jobs - how: [] + what: + - REMS quality of life + - idempotency test + - brand/user/issuer/byte limiting + - squishing + - lazy JSON parsing + - resumable jobs + - heartbeating jobs why: - scalability + grade: d + quantity: + - reduced RAM from >N to N with lazy json flame graphs + rendered: null - when: 2021 - what: DSCat mongo query analysis and optimization - how: [] + what: + - DSCat mongo query analysis and optimization why: - pride-in-craft + grade: c + quantity: [""] + rendered: null - when: 2021 - what: cross-team Mongo incident remediation, support, guidance, SME - how: [] + what: + - cross-team Mongo incident remediation, support, guidance, SME why: - pride-in-craft + grade: b + quantity: [""] + rendered: null - when: 2021 - what: couchsback to v2 as rclone - how: [] + what: + - couchsback to v2 as rclone why: - scalability + grade: c + quantity: [""] + rendered: null - when: 2021 - what: pushed against proposed optimizations (rems cleaning of old edit fields on stale edits) and proved gains (.3% data saved on wire to TS) wouldnt pay off but complied when commanded - how: [] + what: + - pushed against proposed optimizations (rems cleaning of old edit fields on stale edits) and proved gains (.3% data saved on wire to TS) wouldnt pay off but complied when commanded why: - scalability + grade: b + quantity: [""] + rendered: null - when: 2021 - what: Mongo multi-phase, multi-timezone interactive training with offline reading and video + online chaos testing + forum for anonymous feedback - how: [] - why: - - pride-in-craft - - pride-for-others -- when: 2021 - what: LegacyPublicAPI; they wanted to hand to us, so I executed what it'd take to shift ownership to us and documented the gotchas, and it was so bad that they reverted my complete code and revisited so this handoff wouldnt repeat with other teams - how: [] - why: - - pride-in-craft -- when: 2021 - what: healthcheck platform design approved but implementaion priority rejected - how: [] + what: + - LegacyPublicAPI; they wanted to hand to us, so I executed what itd take to shift ownership to us and documented the gotchas, and it was so bad that they reverted my complete code and revisited so this handoff wouldnt repeat with other teams + why: + - pride-in-craft + grade: d + quantity: [""] + rendered: null +- when: 2021 + what: + - healthcheck platform design approved but implementaion priority rejected why: - pride-in-craft - pride-for-others + grade: c + quantity: [""] + rendered: null - when: 2022 - what: champion of quality: suspected and saw symptoms of data incorrectness in REMS snapshots, insisted and provided more and more evidence despite willful holiday ignorance, eventually recognized as p1 - how: [] + rendered: Mentored entry and mid-level engineers on stability, clean code, and distributed systems. +- when: 2022 + rendered: Hosted engineering book and white paper clubs for continuous improvement and cross-team experience sharing for 2 years. +- when: 2022 + rendered: Recovered 98% of data lost in critical incident via coordinating cross-team efforts and dissecting native database operation logs. +- when: 2022 + what: + - champion of quality; suspected and saw symptoms of data incorrectness in REMS snapshots, insisted and provided more and more evidence despite willful holiday ignorance, eventually recognized as p1 why: - pride-in-craft + grade: c + quantity: + - discovered bug affecting N rows + rendered: null - when: 2022 - what: became team lead - how: [] + what: + - became team lead why: - scalability + grade: c + quantity: [""] + rendered: null - when: 2022 - what: cost-benefit of geni on ddb: 10x the cost but reduces hardlyAnyOperationalBurdenQuantified - how: [] + what: + - cost-benefit of geni on ddb; 10x the cost but reduces hardlyAnyOperationalBurdenQuantified why: - pride-in-craft + grade: b + quantity: + - contrary to popular opinion, found N% more cost for N risk to move mongo to DDB as-is + rendered: Challenged deprecation of MongoDB for DynamoDB, ultimately saving $N annually and operational burden on N teams. - when: 2022 - what: geni iops -> i insist and tune docker when team wants to ignore call to action - how: [] + what: + - geni iops -> i insist and tune docker when team wants to ignore call to action why: - pride-in-craft + grade: c + quantity: [""] + rendered: null - when: 2022 - what: response-files OOMs image resizing sidecar proposed + open source used - how: [] + what: + - response-files OOMs image resizing sidecar proposed + open source used why: - scalability - pride-in-craft + grade: c + quantity: + - N ooms/errors per week + - N on call alerts for nothing + - 0 migration pain + rendered: null - when: 2022 - what: generic aws migration scripts w/ mentee leveraged by tens of teams for s3, ddb, lambda, sns, sqs - how: [] + what: + - generic aws migration scripts w/ mentee leveraged by tens of teams for s3, ddb, lambda, sns, sqs + what2: | + https://huggingface.co/chat/conversation/6533fbd355db1e7b0bf62a3b + Model: mistralai/Mistral-7B-Instruct-v0.1 + https://www.linkedin.com/posts/thedanielbotero_use-these-chatgpt-prompts-if-you-want-to-activity-7119669945298284546-q1DA/?utm_source=share&utm_medium=member_desktop + created custom AWS asset management tooling that streamlined our infrastructure management process and saved time and resources why: - pride-in-craft - pride-for-others - scalability + grade: a + quantity: + - 9 teams + - | + Production[674592268301]/api_access $ ls replication-user-* | grep -o 'replication.user.[a-z]*-' | uniq + replication-user-datasets- + replication-user-datastore- + replication-user-des- + replication-user-distributions- + replication-user-dp- + replication-user-dpie- + replication-user-eax- + replication-user-graphic- + replication-user-xmd- + - with 1 mentee + - each team saved N man hours + - 7 aws technologies + rendered: "Spearheaded AWS asset replication tooling, sparing 9 teams from duplicating work relocating up to 7 AWS technologies each." - when: 2022 - what: cicd for team; onboarding + converting + creating continuous testing framework - how: [] + what: + - cicd for team; onboarding + converting + creating continuous testing framework why: - scalability + grade: b + quantity: + - N repos from wild west to E2E // atlas-data loader, -qmp, -qmp canary, -data loader canary, qdp counts, janus + - blocked N releases // from spinnaker ui probably + - ajw initial release from 25% e2e test to 75% + - more E2E tests on previously E2E test free repos because old mentee sahithig didnt feel comfortable joining the team fearing shes break stuff + - test everything; our tests found FSCS outages and then FSCS team found they had no visibility + - test everything; atlas data loader first e2e test + - test everything; block dev if merging release isnt noop + - test everything; legacy responses first e2e test + - test everything; except dont; response-files keepalives cross-dc would expire and break response-files allocs permanently, so tests couldnt pass to release fix + - test everything; janus cruddy e2e tests + - 10 data-store/* repos, 1 legacyresponses + - | + fffffffff finding carter throughput gonna hurt if even possible + well, i guess i just need to find b1 failures because qamel fail and check commit diff for the one after + only since cruddy invention + spinnaker prunes so + - | + 'from:@Spinnaker "Deploy to Beta" "Failed" in:#datastore-releases' + 11 unique dates in -30d..now + 10 unique dates in -60d..-30d + 10 unique dates in -90d..-60d + rendered: "Created automated release test suites for 11 services, which catches 10 would-be customer facing bugs per month on average." - when: 2022 - what: sahithig + itony mentorships; spead asks what's wrong with onboarding? what onboarding! - how: [] + what: + - sahithig + itony mentorships; spead asks whats wrong with onboarding? what onboarding! why: - pride-in-craft - pride-for-others - scalability + grade: b + quantity: [""] + rendered: null - when: 2022 - what: monorepo and parallelizing and caching packages = Jenkins from 10m to 2m - how: [] + what: + - monorepo and parallelizing and caching packages = Jenkins from 10m to 2m why: - pride-in-craft - scalability + grade: d + quantity: [""] + rendered: null - when: 2022 - what: autopatching for vuln remediation via scheduled builds for team w/ stable, quiet cicd - how: [] + what: + - autopatching for vuln remediation via scheduled builds for team w/ stable, quiet cicd - scalability + grade: d + quantity: + - our team does N images per month vs DPORCS + - N of last N weeks fedramp high compliant + rendered: null - when: 2022 - what: | - The REMS Data Loss Incident - * mongo bug around leaked oplog lock = no disk persistence = total loss - * upstream replayed jobs or shared their mongodb oplog so i could rebuild - * forward-facing communication; instead of sorry, this is our root cause and future prevention - how: [] + what: + - The REMS Data Loss Incident + - mongo bug around leaked oplog lock = no disk persistence = total loss + - upstream replayed jobs or shared their mongodb oplog so i could rebuild + - forward-facing communication; instead of sorry, this is our root cause and future prevention why: - pride-in-craft + grade: b + quantity: + - N% jobs restored + - N of N parties fully recovered + rendered: null - when: 2022 - what: miss; jfe needs faster virus scanning so I give 'em 10%. They want 10x because they retry all N files of their batch of M every time. Losers. - how: [] + what: + - miss; jfe needs faster virus scanning so I give em 10%. They want 10x because they retry all N files of their batch of M every time. Losers. why: - scalability + grade: d + quantity: [""] + rendered: null - when: 2022 - what: every aws migration solo or nearly - how: [] + what: + - every aws migration solo or nearly why: - scalability + grade: c + quantity: [""] + rendered: null - when: 2022 - what: ajw initial release from 25% e2e test to 75% - how: [] - why: - - pride-in-craft - - pride-for-others -- when: 2022 - what: became team lead :sparkles: and promoted to l5 - how: [] + what: + - became team lead and promoted to l5 why: - role-model-dad + grade: b + quantity: [""] + rendered: null - when: 2022 - what: coda doc for planning splits owners from contributors w/ weights - how: [] + what: + - coda doc for planning splits owners from contributors w/ weights why: - scalability + grade: b + quantity: + - hit N% of team commitments up from N + rednered: null + rendered2: "Revised bottom-up quarterly planning to consider variable development time costs, averaging in N% more team committments hit. // this is pretty fuckin vauge..." - when: 2022 - what: miss; davidc exported to orcs despite wishes to stay - how: [] + what: + - miss; davidc exported to orcs despite wishes to stay why: - pride-in-craft - role-model-dad + grade: d + quantity: [""] + rendered: null - when: 2022 - what: swimlanes of rems; byte write/read rate limits, terminator specific pool - how: [] + what: + - swimlanes of rems; byte write/read rate limits, terminator specific pool why: - scalability - pride-in-craft + grade: d + quantity: [""] + rendered: null - when: 2022 - what: | - tested REMS no-ops when carter ignored me asking him to - * "please write 1 test before i get back from vacation" - * 0 forever - how: [] + what: + - tested REMS no-ops when carter ignored me asking him to + - please write 1 test before i get back from vacation + - 0 forever why: - pride-in-craft - pride-for-others + grade: d + quantity: [""] + rendered: null - when: 2022 - what: generic nomad cost analysis grafana - how: [] + what: + - generic nomad cost analysis grafana why: - scalability + grade: b + quantity: + - generic cost analysis found $N over provisioned hardware transformation+rems + rendered: "Built a cost analysis Grafana dashboard that revealed $Nk in over allocated elastic compute hardware annually." - when: 2023 - what: learning the performance feedback game; my perception is no one else's reality; make a rubric and define specific examples against it - how: [] + what: + - learning the performance feedback game; my perception is no one elses reality; make a rubric and define specific examples against it why: - pride-in-craft - pride-for-others - role-model-dad + grade: b + quantity: [""] + rendered: null - when: 2023 - what: miss; horizons doc review wasn’t generalized/brief enough - how: [] + what: + - miss; horizons doc review wasn’t generalized/brief enough why: - pride-in-craft - pride-for-others - customer-obsesssion + grade: d + quantity: [""] + rendered: null - when: 2023 - what: 2nd highest contributor to runbook blitz - how: [] + what: + - 2nd highest contributor to runbook blitz why: - pride-in-craft - pride-for-others + grade: d + quantity: [""] + rendered: null - when: 2023 - what: when overloaded with ops, told team and offloaded + handed off threads - how: [] + what: + - when overloaded with ops, told team and offloaded + handed off threads why: - pride-in-craft + grade: c + quantity: [""] + rendered: null - when: 2023 - what: fairness for rems; if attempt to use N threads per box, defer to low prio queue - how: [] + what: + - fairness for rems; if attempt to use N threads per box, defer to low prio queue why: - pride-in-craft - scalability + grade: c + quantity: + - sandboxed about N minor incidents per month + rendered: null - when: 2023 - what: | - interactive cicd tutorial with dpie so they could execute side-by-side - * not my fault they didnt - how: [] + what: + - interactive cicd tutorial with dpie so they could execute side-by-side + - not my fault they didnt why: - pride-for-others - scalability + grade: b + quantity: [""] + rendered: null - when: 2023 - what: chaos test gameday to train new teammate oncall - how: [] + what: + - chaos test gameday to train new teammate oncall why: - pride-in-craft + grade: c + quantity: + - N chaos tests + rendered: null - when: 2023 - what: | - Couchbase-aggedon - * i told 'em how to patch that shit motherfuckers are usual - * i go to office because that team insists - * i stop 'em from terminating early many times - * a hash means we dont need to check, right? - * ive got a script it's good enough i wrote it - * ive got v2 of my script it's good enough i wrote it - * this is a lotta pain, we should give up - * taught 8 teammates how to sed/grep/script/bash - * delegating threads; spiking accesslogs, spiking redis dumps, spiking couchbase backup/restore - * discovered bugs that meant some threads were not viable - * reduced problem to safest state for round 1, next safest for round 2, ... - how: [] + what: + - Couchbase-aggedon + - i told em how to patch that shit motherfuckers are usual + - i go to office because that team insists + - i stop em from terminating early many times + - '* a hash means we dont need to check, right?' + - '* ive got a script its good enough i wrote it' + - '* ive got v2 of my script its good enough i wrote it' + - '* this is a lotta pain, we should give up' + - taught 8 teammates how to sed/grep/script/Bash + - delegating threads; spiking accesslogs, spiking redis dumps, spiking couchbase backup/restore + - discovered bugs that meant some threads were not viable + - reduced problem to safest state for round 1, next safest for round 2, ... why: - pride-in-craft + grade: a + quantity: + - N% data restored + - 2 fault remediations blocked + - N% data jeopardized + - N% data identified free and delegated to N engineers + rendered: "Enforced in a data loss incident, delegating identifying the N% of data lost, 3 distinct restoration efforts, and developing automated validation to block 2 incorrect remediation attempts." - when: 2023 - what: BoQ final - how: [] + what: + - BoQ final why: - scalability + grade: d + quantity: [""] + rendered: null - when: 2023 - what: generic datastore customers could opt into us doing stateramp for them in GENI if they set jwts - how: [] + what: + - generic datastore customers could opt into us doing stateramp for them in GENI if they set jwts why: - pride-in-craft - scalability + grade: b + quantity: + - N teams had a zero or near zero onboarding lift + rendered: null - when: 2023 - what: REMS /partitions, /entrypoints for TS to parallel data load via index scan+hash live vs. keithc INSISTED on not live :eye_roll: - how: [] + what: + - REMS /partitions, /entrypoints for TS to parallel data load via index scan+hash live vs. keithc INSISTED on not live :eye_roll: why: - pride-in-craft - scalability + grade: b + quantity: + - N% dev work for N% gains + - system more flexible to add/remove/update configuration vs baked index + - | + performance of native + for each key in index: + yield key from index + so N index keys yielded from mongo* + performance of live + for each key in index_a: + if partition(key) in range: + yield key from index + dont store a second index, so halve index use + inverse linear scaling with partition count network bytes + 1 partition == native + 2 partitions == 2*native + 3 partitions == 3*native + BUT internally, mongo was doing 2*, 3*, so now we are doing as much complexity but client side so adding network cost + so what is cost of doing N on local vs remote? + well, what is cost of 1 network hop vs cpu filtering? should be that ratio + .4ms vs COST_OF_(HASHING_15_CHARS+GC+MOD) + but all of this still would be done, just async and 99% unused + .4ms vs .1ms + 4:1 + https://qualtrics.slack.com/archives/DGS4G1J87/p1678121083319669 + rendered: Devised a MongoDB live indexing strategy, which supported both current and future use cases, and saved the computing and filling of a new 99% unused native database index. - when: 2023 - what: proposed AtlasQMP as bugfixed singleton, parallelized nomad, or lambda cost and speed and devcost and deliverytime - how: [] + what: + - proposed AtlasQMP as bugfixed singleton, parallelized nomad, or lambda cost and speed and devcost and deliverytime + - high availability; 2 instances of singleton with distributed lock as cheap and good enough path forward why: - pride-in-craft - scalability + grade: b + quantity: + - spike into 3 alternative + - review by team + - final option cost $N% of pre-spike expectations, N% dev work, N% risk + - https://docs.google.com/document/d/10lpn6c8hHRs2dGAm37sP0wKR5vbzJ4zbtY9zBDopTMU/edit + - was 40k items per second, now 175k + - would require qmp proxy to scale about as much as we would drop nomad BUT we gain lambda cost assuming never replay + - so $600 per mo worldwide to $1200 per mo worldwide + - 7k per year isnt very much with cheating + - 2 dev weeks to revamp and clean up + - lets say 4 dev weeks to get qmp team to scale up proxy, the incidents that wouldve caused, and assume kinesis to rest wouldve been trivial + rendered: Optimized a Go application to increase consumption rate from Kafka by 340%, costing half the engineering effort of the proposed rewrite. - when: 2023 - what: response-files split from library-files so we can move to our own database without sideaffect - how: [] + what: + - response-files split from library-files so we can move to our own database without sideaffect why: - scalability - pride-in-craft + grade: c + quantity: + - N% of our requests were for a different team's operations + - N% of our features were for a different team's features + - first wait for them, then fork and pass + rendered: null - when: 2023 - what: | - challenge; q2/q3 planning without knowing what medical leave teammate would do - * 1. offboard what mattered that he was doing - * 2. ask him repeatedly to offboard early and ask for updates how it's going - * 3. guess things he really wants and assume he won't be here for forseeable future even if he does return - * coordinate with mathis on expectations upon his return - how: [] + what: + - challenge; q2/q3 planning without knowing what medical leave teammate would do + - 1. offboard what mattered that he was doing + - 2. ask him repeatedly to offboard early and ask for updates how its going + - 3. guess things he really wants and assume he wont be here for forseeable future even if he does return + - coordinate with mathis on expectations upon his return why: - pride-for-others + grade: d + quantity: [""] + rendered: null - when: 2023 - what: | - REMS vs Translations - * Translatsions gets 500 rows from AE without translations and translates those - * prone to eventual consistency, blocks, brand deprioritizing, random bugs - * REMS got a backlog so we told them first - * and we bumped over and over for them to look - * and it escalated to a snafu - * root cause was squishing taking 90% of our cpu on this backlog of repeat work so sync squishing expedited to full release - * REMS emit a bug to TS that missed edits, so Translatsions kept re-translating what REMS perceived to be no-ops - how: [] + what: + - REMS vs Translations + - Translatsions gets 500 rows from AE without translations and translates those + - '* prone to eventual consistency, blocks, brand deprioritizing, random bugs' + - REMS got a backlog so we told them first + - '* and we bumped over and over for them to look' + - ' * and it escalated to a snafu' + - '* root cause was squishing taking 90% of our cpu on this backlog of repeat work so sync squishing expedited to full release' + - REMS emit a bug to TS that missed edits, so Translatsions kept re-translating what REMS perceived to be no-ops why: - pride-in-craft + grade: c + quantity: [""] + rendered: null - when: 2023 - what: insist on oncall covers during stressful weeks, high effort windows, and okr release time - how: [] + what: + - insist on oncall covers during stressful weeks, high effort windows, and okr release time why: - role-model-dad - pride-in-craft + grade: b + quantity: [""] + rendered: null - when: 2023 - what: still SME on mongo backups and use-case-specific performance optimization - how: [] + what: + - still SME on mongo backups and use-case-specific performance optimization why: - pride-in-craft - scalability + grade: c + quantity: [""] + rendered: null - when: 2023 - what: more E2E tests on previously E2E test free repos because old mentee sahithig didn't feel comfortable joining the team fearing she's break stuff - how: [] + what: + - more E2E tests on previously E2E test free repos because old mentee sahithig didnt feel comfortable joining the team fearing shes break stuff why: - pride-in-craft - scalability - pride-for-others + grade: c + quantity: [""] + rendered: null - when: 2023 - what: navigated a teammate getting exported to a team he didnt want to join AND later getting exported from that team and almost someone else getting exported too - how: [] + what: + - navigated a teammate getting exported to a team he didnt want to join AND later getting exported from that team and almost someone else getting exported too why: - pride-in-craft - role-model-dad + grade: d + quantity: [""] + rendered: null - when: 2023 - what: | - CSchmalzle - * burnt out in q1 from too many projects in-flight - * bi-weekly "are you closing stuff?" - * daily "yaknow that 2 day thing? is it done? when will it be done? what do we need to do to ship it?" for 2 months - * insisted he pick things to handoff and we got 2 from him - * released a lotta stuff untested and broken and i doubled back to fix it - * entire team adds quality as key result - * terrible mr of copy-pasting + 2k lines of code - * "learn2git" - * multi-mr - * refactors separate - * wants to release his mass changes that include customer-facing system behavior changes because "we'll be more correct" - * and lots of support to remediate kanban - * and i say NO u fok - how: [] + what: + - CSchmalzle + - '* burnt out in q1 from too many projects in-flight' + - ' * bi-weekly are you closing stuff?' + - ' * daily yaknow that 2 day thing? is it done? when will it be done? what do we need to do to ship it? for 2 months' + - ' * insisted he pick things to handoff and we got 2 from him' + - '* released a lotta stuff untested and broken and i doubled back to fix it' + - ' * entire team adds quality as key result' + - '* terrible mr of copy-pasting + 2k lines of code' + - ' * learn2git' + - ' * multi-mr' + - ' * refactors separate' + - '* wants to release his mass changes that include customer-facing system behavior changes because well be more correct' + - ' * and lots of support to remediate kanban' + - ' * and i say NO u fok' why: - pride-for-others - scalability + grade: c + quantity: + - weekly checkins for burnout causes + rendered: null - when: 2023 - what: i get team approval on a design to stop not-deleting customer data, they say we should fix at system level, so I spike and prove system level, just for other team to nope.avi out (REMS MoM delete) - how: [] + what: + - i get team approval on a design to stop not-deleting customer data, they say we should fix at system level, so I spike and prove system level, just for other team to nope.avi out (REMS MoM delete) + - designed rems mom deleting parallel with atlas, proposed drs team fixes it and impacted team volume, got deferred indefinitely and solved the same problem yet again but for rems mom why: - pride-in-craft + grade: b + quantity: + - demonstrated N system race conditions and touch points + rendered: "Mapped N unhandled inter-system race conditions to their single point of failure." - when: 2023 - what: | - XMD Contact Consolidation Consumer - * "read our kafka topic like this and call your apis with it" - * ezpz BUT i dont wanna own your business logic by proxy - * "but our manager said you would, and something about throttling" - * handle our 429s and you'll be k - * "but our manager..." - * ...3 weeks later... - * listen here m8, u guys own your own 1 write per second shit, ya hear? - * "we didnt even want that, y'all just took 2 years to get back to us >:(" - * o - how: [] + what: + - XMD Contact Consolidation Consumer + - read our kafka topic like this and call your apis with it + - ezpz BUT i dont wanna own your business logic by proxy + - but our manager said you would, and something about throttling + - handle our 429s and youll be k + - but our manager... + - ...3 weeks later... + - listen here m8, u guys own your own 1 write per second shit, ya hear? + - we didnt even want that, yall just took 2 years to get back to us >:( + - o why: - pride-in-craft -- when: 2023 - what: test everything; atlas qmp canary from ignored to release blocking via librdkafka configs, sleep deletions - how: [] - why: - - pride-in-craft -- when: 2023 - what: test everything; atlas data loader first e2e test - how: [] - why: - - pride-in-craft -- when: 2023 - what: test everything; block dev if merging release isn't noop - how: [] - why: - - scalability -- when: 2023 - what: test everything; legacy responses first e2e test - how: [] - why: - - scalability -- when: 2023 - what: test everything; except don't; response-files keepalives cross-dc would expire and break response-files allocs permanently, so tests couldn't pass to release fix - how: [] - why: - - pride-in-craft -- when: 2023 - what: test everything; our tests found FSCS outages and then FSCS team found they had no visibility - how: [] - why: - - pride-in-craft -- when: 2023 - what: test everything; janus cruddy e2e tests - how: [] - why: - - pride-for-others -- when: 2023 - what: high availability; 2 instances of singleton with distributed lock as cheap and good enough path forward - how: [] - why: - - pride-in-craft - - scalability -- when: 2023 - what: designed rems mom deleting parallel with atlas, proposed drs team fixes it and impacted team volume, got deferred indefinitely and solved the same problem yet again but for rems mom - how: [] - why: - - pride-in-craft - - scalability + grade: c + quantity: + - sample size 1 week revealed new team was scared of N ops per second but N was 1 + rendered: null +- when: 2022 + what: + - feedback; told sean implying we should spend QED time on ops work is against the spirit of QED time but he is an authority figure and makes it uncomfortable not to + grade: b + quantity: [""] + rendered: null +- when: 2022 + what: + - feedback; when i needed to ask michaelp for a remote exception, i had to share i was hesistant because he made possibly leaving engineers sound ostracized and ejected immediately + grade: c + quantity: [""] + rendered: null diff --git a/cv/pick_n.sh b/cv/pick_n.sh new file mode 100644 index 0000000..35f7c88 --- /dev/null +++ b/cv/pick_n.sh @@ -0,0 +1,7 @@ +#! /bin/bash +cd "$(dirname "$(realpath "$BASH_SOURCE")")" +cat ./20* \ +| gojq -c --yaml-input '.[] | [.grade, (.quantity | length), .]' \ +| sort \ +| head -n ${1:-${N:-15}} \ +| $(which jq) -c diff --git a/cv/prompts.yaml b/cv/prompts.yaml new file mode 100644 index 0000000..99a330c --- /dev/null +++ b/cv/prompts.yaml @@ -0,0 +1,8 @@ +- topic: resume wording + src: https://www.linkedin.com/posts/thedanielbotero_use-these-chatgpt-prompts-if-you-want-to-activity-7119669945298284546-q1DA/?utm_source=share&utm_medium=member_desktop + prompt: | + Review my current resume and suggest improvements to ensure it is error-free, precise, and effectively communicates my skill, expertise, and experience. Provide feedback on the structure, including formatting and layout, and avoid any kind of personal opinions or preferences or biases. +- topic: LinkedIn profile headline + src: https://www.linkedin.com/posts/thedanielbotero_use-these-chatgpt-prompts-if-you-want-to-activity-7119669945298284546-q1DA/?utm_source=share&utm_medium=member_desktop + prompt: | + I work in Software Development as a Senior Software Engineer. Can you help me in creating a headline that will catch the interest of recruiters and possible employers? diff --git a/cv/rendered.sh b/cv/rendered.sh new file mode 100644 index 0000000..3391121 --- /dev/null +++ b/cv/rendered.sh @@ -0,0 +1,10 @@ +#! /bin/bash +cd "$(dirname "$(realpath "$BASH_SOURCE")")" +cat 2* \ +| gojq -c --yaml-input '.[] | {when: .when, s: .rendered}' \ +| grep -v null \ +| grep -v '""' \ +| $(which jq) -r -c . \ +| sort \ +| $(which jq) -s 'group_by(.when) | map({key: (.[0].when | tostring), value: [.[] | .s]}) | from_entries' \ +| gojq --yaml-output diff --git a/headless_homebrew_pdf.sh b/headless_homebrew_pdf.sh index 2bdd3f1..8ecb2fe 100644 --- a/headless_homebrew_pdf.sh +++ b/headless_homebrew_pdf.sh @@ -8,20 +8,27 @@ cd src echo PRINTING PDF echo ...which google -which google-chrome-stable -echo ...which miniserve +bin=google-chrome-stable +if ! which $bin; then + bin=chromium +fi +which $bin +if ! which miniserve; then + wget -O $GOPATH/bin/miniserve https://github.com/svenstaro/miniserve/releases/download/v0.24.0/miniserve-0.24.0-x86_64-unknown-linux-musl + chmod +x $GOPATH/bin/miniserve +fi which miniserve -miniserve ./homebrew/ & +miniserve -p 58080 ./homebrew/ & pid=${!} -until curl localhost:8080; do sleep 5; done -google-chrome-stable \ +until curl localhost:58080; do sleep 5; done +$bin \ --no-sandbox \ --headless \ --disable-gpu \ --print-to-pdf=./homebrew/homebrew.pdf \ --run-all-compositor-stages-before-draw \ --no-pdf-header-footer \ - http://localhost:8080/homebrew.html + http://localhost:58080/homebrew.html get_state() { cksum ./homebrew/homebrew.pdf | awk '{print $1}' } diff --git a/src/homebrew/homebrew.html b/src/homebrew/homebrew.html index 14fba55..ea8c32f 100644 --- a/src/homebrew/homebrew.html +++ b/src/homebrew/homebrew.html @@ -19,17 +19,19 @@ @font-face {font-family: "Merriweather"; src: url("./fonts/Merriweather-Bold.ttf"); font-weight: bold;} - +
- + - Bree LaPointe + + Bree LaPointe + @@ -46,17 +48,8 @@ - - contact@blapointe.com - - - - - - - - - (336) 701-6159 + + hello@breel.dev @@ -71,8 +64,8 @@ - - linkedin.com/in/lapoba16 + + linkedin.com/in/breeldev @@ -110,18 +103,33 @@ - - Mentored entry and mid-level engineers on stability, clean code, and distributed systems. + + Optimized a Go application to increase consumption rate from Kafka by 340%, costing half the engineering effort of the proposed rewrite. - - Hosted engineering book and white paper clubs for continuous improvement and cross-team experience sharing for 2 years. + + Devised a MongoDB live indexing strategy, which supported both current and future use cases, and saved the computing and filling of a new 99% unused native database index. - - Recovered 98% of data lost in critical incident via coordinating cross team efforts and dissecting native database operation logs. + + Spearheaded AWS asset replication tooling, sparing 9 teams from duplicating work relocating up to 7 AWS technologies each. + + + + + Mentored 2 intern, 2 new grad, and 4 mid-level engineers on operational tools, best practices for maintainable software, and career development. + + + + + Founded the in-house standard system to continuously verify 16 teams' compliance with disaster recovery requirements. + + + + + Created automated release test suites for 11 services, which catches 10 would-be customer facing bugs per month on average. @@ -137,28 +145,18 @@ - - Developed and owned highly available and reliable data storage and operational tooling. + + Scripted no-downtime database reconfiguration, which was leveraged by 3 teams to update 168 instances. - - Mentored 2 interns, 2 new hires, and 3 mid-level cross team engineers on operational tools, maintainable software, and career development. + + Automated infrastructure patching for 30 microservices and 25 database clusters by creating a modular and testable Bash script framework. - - Genericized AWS asset management tooling ahead of company-wide mass migration initiative. - - - - - Championed disaster recovery by supporting training runs with documentation, tools, and live support across teams and enforced continuous compliance for 17 database clusters with monitoring and alerting. - - - - - Lent expertise owning MongoDB across teams by advising on configuration and data models and genericizing disaster recovery tooling for 21 teams. + + Administered on-call training, including 6 chaos tests gamedays across 5 systems. @@ -174,13 +172,13 @@ - - Automated no-downtime system patching for 30 services and 25 database clusters by creating a modular and testable scripting framework. + + Created custom Python tooling to create, increment, restore, and check for MongoDB database backups for standalone, replicated, and sharded deployments without customer impact, and has been the in-house standard for 21 teams for 4 years. - - Raised backend service's availability to 99.99% and reduced hardware costs by 40% by selecting, training team on, and live migrating to a different datastore. + + Decreased backend service's annual outages by 91% and reduced hardware costs by 40% by selecting, training owners on, and migrating without downtime to a different datastore. @@ -220,59 +218,6 @@ - - - - - - High Point University - - - - - - - - Bachelor of Arts in Computer Science - 3.91/4.00 GPA - - - - - - - - - - - - - - - - PUBLICATIONS - - - - - - - - - Arabidopsis thaliana computationally-generated next-state gene interaction models - Jun 2018 - - - - - - - Refactored to correct bugs and improve efficiency by orders of magnitude - - - - - - @@ -289,19 +234,19 @@ - • - Languages: Golang, Bash, Python3 + • + Languages: Go (Golang), Bash, Python3 - • - Platforms: Docker, Hashicorp, Linux/Unix, AWS, Jenkins, REST, Microservices, Git + • + Platforms: Docker, Hashicorp, Linux/Unix, AWS, REST, Microservices, Git - • + Datastores: MongoDB, Redis, S3, Couchbase, DynamoDB diff --git a/src/homebrew/homebrew.pdf b/src/homebrew/homebrew.pdf index 563eb2d8c5f6a941e42c99e1d95ed22002ec3cf3..de8b7c78019685ef38b015c7db9304d96a9f2749 100644 GIT binary patch literal 43759 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 U{CiIX0)PNqDAd$%<;76`7t7GxCIA2c literal 47341 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 !F0V2+`$f(-U#HSUW21K9|xaj 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 R5D3D}_K1e&m7Lh4{{tR-Rx1Di diff --git a/src/homebrew/homebrew.sh b/src/homebrew/homebrew.sh index 0e7891f..f862018 100644 --- a/src/homebrew/homebrew.sh +++ b/src/homebrew/homebrew.sh @@ -22,8 +22,8 @@ while sleep 1; do | sed "s/tel:/$(html_escape_str tel: | sed 's/\&/\\\&/g')/g" \ | gojq --yaml-input . \ | tpl --file homebrew.tmpl \ - | tee ./homebrew.html \ - > /dev/null + > ./homebrew.html.2 + mv ./homebrew.html.2 ./homebrew.html date done diff --git a/src/homebrew/homebrew.tmpl b/src/homebrew/homebrew.tmpl index 97bb11e..adfe700 100644 --- a/src/homebrew/homebrew.tmpl +++ b/src/homebrew/homebrew.tmpl @@ -19,17 +19,19 @@ @font-face {font-family: "Merriweather"; src: url("./fonts/Merriweather-Bold.ttf"); font-weight: bold;} - +
- + - {{ range .resume.name }}{{ . }} {{ end }} + + {{ range .resume.name }}{{ . }} {{ end }} + {{ if .resume.pdf_file_name }} @@ -70,7 +72,7 @@ {{ range .what }} - • + {{ . }} @@ -108,8 +110,8 @@ {{ range .what }} - - {{ . }} + + {{ . }} {{ end }} diff --git a/src/homebrew/homebrew.yaml b/src/homebrew/homebrew.yaml index 746b99c..c5cf9cd 100644 --- a/src/homebrew/homebrew.yaml +++ b/src/homebrew/homebrew.yaml @@ -6,16 +6,16 @@ resume: title: 'Senior Software Engineer' contact: links: - - text: 'contact@blapointe.com' - link: 'mailto:contact@blapointe.com' + - text: 'hello@breel.dev' + link: 'mailto:hello@breel.dev' svg: '' - - text: (336) 701-6159 - link: 'tel:3367016159' - svg: '' + #- text: (336) 701-6159 + # link: 'tel:3367016159' + # svg: '' - text: Provo, UT svg: '' - - text: linkedin.com/in/lapoba16 - link: https://linkedin.com/in/lapoba16 + - text: linkedin.com/in/breeldev + link: https://linkedin.com/in/breeldev svg: '' headings: - title: WORK EXPERIENCE @@ -25,41 +25,41 @@ resume: - title: Senior Software Engineer, Team Lead when: May 2022 - Present what: - - Mentored entry and mid-level engineers on stability, clean code, and distributed systems. - - Hosted engineering book and white paper clubs for continuous improvement and cross-team experience sharing for 2 years. - - Recovered 98% of data lost in critical incident via coordinating cross team efforts and dissecting native database operation logs. + - Optimized a Go application to increase consumption rate from Kafka by 340%, costing half the engineering effort of the proposed rewrite. + - Devised a MongoDB live indexing strategy, which supported both current and future use cases, and saved the computing and filling of a new 99% unused native database index. + - Spearheaded AWS asset replication tooling, sparing 9 teams from duplicating work relocating up to 7 AWS technologies each. + - Mentored 2 intern, 2 new grad, and 4 mid-level engineers on operational tools, best practices for maintainable software, and career development. + - Founded the in-house standard system to continuously verify 16 teams' compliance with disaster recovery requirements. + - Created automated release test suites for 11 services, which catches 10 would-be customer facing bugs per month on average. - title: Software Engineer II when: Oct 2019 - May 2022 what: - - Developed and owned highly available and reliable data storage and operational tooling. - - Mentored 2 interns, 2 new hires, and 3 mid-level cross team engineers on operational tools, maintainable software, and career development. - - Genericized AWS asset management tooling ahead of company-wide mass migration initiative. - - Championed disaster recovery by supporting training runs with documentation, tools, and live support across teams and enforced continuous compliance for 17 database clusters with monitoring and alerting. - - Lent expertise owning MongoDB across teams by advising on configuration and data models and genericizing disaster recovery tooling for 21 teams. + - "Scripted no-downtime database reconfiguration, which was leveraged by 3 teams to update 168 instances." + - Automated infrastructure patching for 30 microservices and 25 database clusters by creating a modular and testable Bash script framework. + - Administered on-call training, including 6 chaos tests gamedays across 5 systems. - title: Software Engineer I when: Feb 2018 - Oct 2019 what: - - Automated no-downtime system patching for 30 services and 25 database clusters by creating a modular and testable scripting framework. - - Raised backend service's availability to 99.99% and reduced hardware costs by 40% by selecting, training team on, and live migrating to a different datastore. + - Created custom Python tooling to create, increment, restore, and check for MongoDB database backups for standalone, replicated, and sharded deployments without customer impact, and has been the in-house standard for 21 teams for 4 years. + - Decreased backend service's annual outages by 91% and reduced hardware costs by 40% by selecting, training owners on, and migrating without downtime to a different datastore. - title: EDUCATION headings: - title: Wake Forest University not-when: Dec 2017 what: - Master of Science in Computer Science - 3.88/4.00 GPA - - title: High Point University - not-when: Dec 2015 - what: - - Bachelor of Arts in Computer Science - 3.91/4.00 GPA - - title: PUBLICATIONS - headings: - - title: Arabidopsis thaliana computationally-generated next-state gene interaction models - when: Jun 2018 - what: - - Refactored to correct bugs and improve efficiency by orders of magnitude + #- title: High Point University + # not-when: Dec 2015 + # what: + # - Bachelor of Arts in Computer Science - 3.91/4.00 GPA + #- title: PUBLICATIONS + # headings: + # - title: Arabidopsis thaliana computationally-generated next-state gene interaction models + # when: Jun 2018 + # what: + # - Refactored to correct bugs and improve efficiency by orders of magnitude - title: SKILLS what: - - 'Languages: Golang, Bash, Python3' - - 'Platforms: Docker, Hashicorp, Linux/Unix, AWS, Jenkins, REST, Microservices, Git' + - 'Languages: Go (Golang), Bash, Python3' + - 'Platforms: Docker, Hashicorp, Linux/Unix, AWS, REST, Microservices, Git' - 'Datastores: MongoDB, Redis, S3, Couchbase, DynamoDB' -