Compare commits
16 Commits
dcd4d2676b
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6ed9ff1071 | ||
|
|
a0b60021cf | ||
|
|
8487f1577e | ||
|
|
da21248adb | ||
|
|
28dd611b7b | ||
|
|
7f7256fe07 | ||
|
|
a79740c871 | ||
|
|
d644cf7be1 | ||
|
|
0bb733ac90 | ||
|
|
53ac3de436 | ||
|
|
e11eeddb6a | ||
|
|
c5e75cb2fb | ||
|
|
b00b568fa0 | ||
|
|
ec063d080c | ||
|
|
c19a6741c1 | ||
|
|
8afa0a8be4 |
@@ -15,10 +15,9 @@ jobs:
|
|||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v3
|
||||||
- name: cicd
|
- name: cicd
|
||||||
run: |
|
run: |
|
||||||
|
echo "export FIREBASE_CI_TOKEN='${{ secrets.FIREBASE_CI_TOKEN }}'" >> ./.env
|
||||||
|
echo "export GITLAB_PAT='${{ secrets.GITLAB_PAT }}'" >> ./.env
|
||||||
f=$(mktemp)
|
f=$(mktemp)
|
||||||
echo "FIREBASE_CI_TOKEN='${{ secrets.FIREBASE_CI_TOKEN }}'" >> ./.env
|
|
||||||
echo "GITLAB_PAT='${{ secrets.GITLAB_PAT }}'" >> ./.env
|
|
||||||
cat ./.env
|
|
||||||
echo '
|
echo '
|
||||||
FROM registry-app.inhome.blapointe.com:5001/portfolio/resume/builder:latest
|
FROM registry-app.inhome.blapointe.com:5001/portfolio/resume/builder:latest
|
||||||
WORKDIR /mnt
|
WORKDIR /mnt
|
||||||
|
|||||||
24
README.md
24
README.md
@@ -1,18 +1,16 @@
|
|||||||
# Resume
|
# Resume
|
||||||
|
|
||||||
|
* todo
|
||||||
|
* prepare stories
|
||||||
|
* cross-team project with a hitch and deadline pressure
|
||||||
|
* an urgent incident
|
||||||
|
* in interviews, do the dumb version first
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
1. modify [homebrew.yaml](./src/homebrew/homebrew.yaml)
|
1. modify [homebrew.yaml](./src/homebrew/homebrew.yaml)
|
||||||
1. generate `cd ./src/homebrew; bash ./homebrew.sh`
|
1. generate `cd ./src/homebrew; bash ./homebrew.sh` (interrupt when it starts timestamping)
|
||||||
1. `open ./src/homebrew/homebrew.html`
|
1. `open ./src/homebrew/homebrew.html`
|
||||||
1. `ctrl + p` and save as pdf
|
1. `ctrl + p` and save as `./src/homebrew/homebrew.pdf`
|
||||||
1. commit + push
|
1. commit + push
|
||||||
|
1. `.gitea/...` CICD pushes to firebase + gitlab
|
||||||
## CICD
|
|
||||||
|
|
||||||
1. `gitness.inhome.blapointe.com` has a `./.harness` pipeline
|
|
||||||
1. the pipeline
|
|
||||||
1. renders [Resume](#resume) as `$(mktemp -d)/public`
|
|
||||||
1. clones [gitlab](https://gitlab.com/breel/resume.git)
|
|
||||||
1. replaces [gitlab](https://gitlab.com/breel/resume.git) with `.../public/`
|
|
||||||
1. pushes [gitlab](https://gitlab.com/breel/resume.git)
|
|
||||||
1. [render](https://dashboard.render.com/static/srv-cklkk8o710pc73d7fn7g) detects public repo event and updates its static site hosting for [breel.dev](https://breel.dev)
|
|
||||||
1. [firebase](https://console.firebase.google.com/u/0/project/blapointe-com/overview) deploys `.../public/` for [blapointe.com](https://blapointe.com)
|
|
||||||
|
|||||||
@@ -77,7 +77,7 @@ cd $outdir
|
|||||||
git commit -m "$(date -u +%Y-%m-%dT%H:%M:%S)"
|
git commit -m "$(date -u +%Y-%m-%dT%H:%M:%S)"
|
||||||
git push origin main
|
git push origin main
|
||||||
fi
|
fi
|
||||||
) || true
|
)
|
||||||
|
|
||||||
(
|
(
|
||||||
set -ueo pipefail
|
set -ueo pipefail
|
||||||
@@ -93,4 +93,4 @@ cd $outdir
|
|||||||
fi
|
fi
|
||||||
echo firebase deploy "${log_args[@]}"
|
echo firebase deploy "${log_args[@]}"
|
||||||
firebase deploy "${args[@]}"
|
firebase deploy "${args[@]}"
|
||||||
)
|
) || true
|
||||||
|
|||||||
@@ -75,11 +75,11 @@
|
|||||||
</view>
|
</view>
|
||||||
|
|
||||||
|
|
||||||
<view style="display: flex; flex-direction: column; gap: 6pt; margin-top: 12pt;">
|
<view style="display: flex; flex-direction: column; gap: 6pt; margin-top: 9pt;">
|
||||||
<view style="display: flex; flex-direction: row; align-items: center;">
|
<view style="display: flex; flex-direction: row; align-items: center; font-size: 14pt;">
|
||||||
<view style="height: 3.75pt; width: 30pt; background-color: rgb(129, 140, 248); margin-right: 10.5pt;">
|
<view style="height: 3.75pt; width: 30pt; background-color: rgb(129, 140, 248); margin-right: 10.5pt;">
|
||||||
</view>
|
</view>
|
||||||
<text style="font-weight: bold; letter-spacing: 0.3pt;">WORK EXPERIENCE</text>
|
<text style="font-weight: bold; letter-spacing: 0.3pt;" class="resume-headings-i-title">Work Experience</text>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
|
|
||||||
@@ -87,15 +87,17 @@
|
|||||||
|
|
||||||
<view>
|
<view>
|
||||||
|
|
||||||
<text style="color: rgb(23, 23, 23); font-weight: bold;">Qualtrics</text>
|
<span style="font-size: 14pt;">
|
||||||
|
<text style="color: rgb(23, 23, 23); font-weight: bold;" class="resume-headings-i-headings-i-title-w-headings">Render</text>
|
||||||
|
</span>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<view style="display: flex; flex-direction: row; justify-content: space-between; margin-top: 4.5pt;">
|
<view style="display: flex; flex-direction: row; justify-content: space-between; margin-top: 4.5pt;">
|
||||||
<text style="color: rgb(23, 23, 23); font-weight: normal;">Senior Software Engineer, Team Lead</text>
|
<text style="color: rgb(23, 23, 23); font-weight: normal; font-style: italic;" class="resume-headings-i-headings-i-headings-i-title">Senior Software Engineer</text>
|
||||||
<text style="color: rgb(23, 23, 23); font-weight: normal;">May 2022 - Present
|
<text style="color: rgb(23, 23, 23); font-weight: normal; font-size: 9.5pt;">May 2025 - Present
|
||||||
</text>
|
</text>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
@@ -103,32 +105,79 @@
|
|||||||
|
|
||||||
|
|
||||||
<view style="display: flex; flex-direction: row;">
|
<view style="display: flex; flex-direction: row;">
|
||||||
<text style="color: rgb(23, 23, 23); font-weight: bold; padding-left: 6pt; padding-right: 6pt; line-height: 1.35; margin-top: 0pt;">•</text>
|
<text style="color: rgb(23, 23, 23); font-weight: bold; padding-left: 6pt; padding-right: 6pt; line-height: 1.35; margin-top: 0pt;">•</text>
|
||||||
|
<text style="color: rgb(23, 23, 23); font-weight: normal; line-height: 1.35; flex-grow: 1; flex-basis: 0px;">Cut new PostgreSQL major version support development cost from 8 weeks to 1 week.</text>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<view style="display: flex; flex-direction: row;">
|
||||||
|
<text style="color: rgb(23, 23, 23); font-weight: bold; padding-left: 6pt; padding-right: 6pt; line-height: 1.35; margin-top: 0pt;">•</text>
|
||||||
|
<text style="color: rgb(23, 23, 23); font-weight: normal; line-height: 1.35; flex-grow: 1; flex-basis: 0px;">Reduced point-in-time-recovery restore failure volume 60% and restore runtime up to 80% with dynamic tuning.</text>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<view style="display: flex; flex-direction: row; justify-content: space-between; margin-top: 4.5pt;">
|
||||||
|
<text style="color: rgb(23, 23, 23); font-weight: normal; font-style: italic;" class="resume-headings-i-headings-i-headings-i-title">Software Engineer</text>
|
||||||
|
<text style="color: rgb(23, 23, 23); font-weight: normal; font-size: 9.5pt;">Dec 2023 - May 2025
|
||||||
|
</text>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<view style="display: flex; flex-direction: column; margin-top: 4.5pt;">
|
||||||
|
|
||||||
|
|
||||||
|
<view style="display: flex; flex-direction: row;">
|
||||||
|
<text style="color: rgb(23, 23, 23); font-weight: bold; padding-left: 6pt; padding-right: 6pt; line-height: 1.35; margin-top: 0pt;">•</text>
|
||||||
|
<text style="color: rgb(23, 23, 23); font-weight: normal; line-height: 1.35; flex-grow: 1; flex-basis: 0px;">Crafted PostgreSQL low-downtime migrations and in-place major version upgrades.</text>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
|
||||||
|
</view>
|
||||||
|
|
||||||
|
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<view>
|
||||||
|
|
||||||
|
<span style="font-size: 14pt;">
|
||||||
|
<text style="color: rgb(23, 23, 23); font-weight: bold;" class="resume-headings-i-headings-i-title-w-headings">Qualtrics</text>
|
||||||
|
</span>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<view style="display: flex; flex-direction: row; justify-content: space-between; margin-top: 4.5pt;">
|
||||||
|
<text style="color: rgb(23, 23, 23); font-weight: normal; font-style: italic;" class="resume-headings-i-headings-i-headings-i-title">Senior Software Engineer, Team Lead</text>
|
||||||
|
<text style="color: rgb(23, 23, 23); font-weight: normal; font-size: 9.5pt;">May 2022 - Dec 2023
|
||||||
|
</text>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<view style="display: flex; flex-direction: column; margin-top: 4.5pt;">
|
||||||
|
|
||||||
|
|
||||||
|
<view style="display: flex; flex-direction: row;">
|
||||||
|
<text style="color: rgb(23, 23, 23); font-weight: bold; padding-left: 6pt; padding-right: 6pt; line-height: 1.35; margin-top: 0pt;">•</text>
|
||||||
<text style="color: rgb(23, 23, 23); font-weight: normal; line-height: 1.35; flex-grow: 1; flex-basis: 0px;">Optimized a Go application to increase consumption rate from Kafka by 340%, costing half the engineering effort of the proposed rewrite.</text>
|
<text style="color: rgb(23, 23, 23); font-weight: normal; line-height: 1.35; flex-grow: 1; flex-basis: 0px;">Optimized a Go application to increase consumption rate from Kafka by 340%, costing half the engineering effort of the proposed rewrite.</text>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
<view style="display: flex; flex-direction: row;">
|
<view style="display: flex; flex-direction: row;">
|
||||||
<text style="color: rgb(23, 23, 23); font-weight: bold; padding-left: 6pt; padding-right: 6pt; line-height: 1.35; margin-top: 0pt;">•</text>
|
<text style="color: rgb(23, 23, 23); font-weight: bold; padding-left: 6pt; padding-right: 6pt; line-height: 1.35; margin-top: 0pt;">•</text>
|
||||||
<text style="color: rgb(23, 23, 23); font-weight: normal; line-height: 1.35; flex-grow: 1; flex-basis: 0px;">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.</text>
|
|
||||||
</view>
|
|
||||||
|
|
||||||
<view style="display: flex; flex-direction: row;">
|
|
||||||
<text style="color: rgb(23, 23, 23); font-weight: bold; padding-left: 6pt; padding-right: 6pt; line-height: 1.35; margin-top: 0pt;">•</text>
|
|
||||||
<text style="color: rgb(23, 23, 23); font-weight: normal; line-height: 1.35; flex-grow: 1; flex-basis: 0px;">Spearheaded AWS asset replication tooling, sparing 9 teams from duplicating work relocating up to 7 AWS technologies each.</text>
|
<text style="color: rgb(23, 23, 23); font-weight: normal; line-height: 1.35; flex-grow: 1; flex-basis: 0px;">Spearheaded AWS asset replication tooling, sparing 9 teams from duplicating work relocating up to 7 AWS technologies each.</text>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
<view style="display: flex; flex-direction: row;">
|
<view style="display: flex; flex-direction: row;">
|
||||||
<text style="color: rgb(23, 23, 23); font-weight: bold; padding-left: 6pt; padding-right: 6pt; line-height: 1.35; margin-top: 0pt;">•</text>
|
<text style="color: rgb(23, 23, 23); font-weight: bold; padding-left: 6pt; padding-right: 6pt; line-height: 1.35; margin-top: 0pt;">•</text>
|
||||||
<text style="color: rgb(23, 23, 23); font-weight: normal; line-height: 1.35; flex-grow: 1; flex-basis: 0px;">Mentored 2 intern, 2 new grad, and 4 mid-level engineers on operational tools, best practices for maintainable software, and career development.</text>
|
<text style="color: rgb(23, 23, 23); font-weight: normal; line-height: 1.35; flex-grow: 1; flex-basis: 0px;">Mentored 2 intern, 2 new grad, and 4 mid-level engineers on operational tools, best practices for maintainable software, and career development.</text>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
<view style="display: flex; flex-direction: row;">
|
<view style="display: flex; flex-direction: row;">
|
||||||
<text style="color: rgb(23, 23, 23); font-weight: bold; padding-left: 6pt; padding-right: 6pt; line-height: 1.35; margin-top: 0pt;">•</text>
|
<text style="color: rgb(23, 23, 23); font-weight: bold; padding-left: 6pt; padding-right: 6pt; line-height: 1.35; margin-top: 0pt;">•</text>
|
||||||
<text style="color: rgb(23, 23, 23); font-weight: normal; line-height: 1.35; flex-grow: 1; flex-basis: 0px;">Founded the in-house standard system to continuously verify 16 teams' compliance with disaster recovery requirements.</text>
|
<text style="color: rgb(23, 23, 23); font-weight: normal; line-height: 1.35; flex-grow: 1; flex-basis: 0px;">Founded the in-house standard system to continuously verify 16 teams' compliance with disaster recovery requirements.</text>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
<view style="display: flex; flex-direction: row;">
|
<view style="display: flex; flex-direction: row;">
|
||||||
<text style="color: rgb(23, 23, 23); font-weight: bold; padding-left: 6pt; padding-right: 6pt; line-height: 1.35; margin-top: 0pt;">•</text>
|
<text style="color: rgb(23, 23, 23); font-weight: bold; padding-left: 6pt; padding-right: 6pt; line-height: 1.35; margin-top: 0pt;">•</text>
|
||||||
<text style="color: rgb(23, 23, 23); font-weight: normal; line-height: 1.35; flex-grow: 1; flex-basis: 0px;">Created automated release test suites for 11 services, which catches 10 would-be customer facing bugs per month on average.</text>
|
<text style="color: rgb(23, 23, 23); font-weight: normal; line-height: 1.35; flex-grow: 1; flex-basis: 0px;">Created automated release test suites for 11 services, which catches 10 would-be customer facing bugs per month on average.</text>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
@@ -136,8 +185,8 @@
|
|||||||
</view>
|
</view>
|
||||||
|
|
||||||
<view style="display: flex; flex-direction: row; justify-content: space-between; margin-top: 4.5pt;">
|
<view style="display: flex; flex-direction: row; justify-content: space-between; margin-top: 4.5pt;">
|
||||||
<text style="color: rgb(23, 23, 23); font-weight: normal;">Software Engineer II</text>
|
<text style="color: rgb(23, 23, 23); font-weight: normal; font-style: italic;" class="resume-headings-i-headings-i-headings-i-title">Software Engineer II</text>
|
||||||
<text style="color: rgb(23, 23, 23); font-weight: normal;">Oct 2019 - May 2022
|
<text style="color: rgb(23, 23, 23); font-weight: normal; font-size: 9.5pt;">Oct 2019 - May 2022
|
||||||
</text>
|
</text>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
@@ -145,26 +194,16 @@
|
|||||||
|
|
||||||
|
|
||||||
<view style="display: flex; flex-direction: row;">
|
<view style="display: flex; flex-direction: row;">
|
||||||
<text style="color: rgb(23, 23, 23); font-weight: bold; padding-left: 6pt; padding-right: 6pt; line-height: 1.35; margin-top: 0pt;">•</text>
|
<text style="color: rgb(23, 23, 23); font-weight: bold; padding-left: 6pt; padding-right: 6pt; line-height: 1.35; margin-top: 0pt;">•</text>
|
||||||
<text style="color: rgb(23, 23, 23); font-weight: normal; line-height: 1.35; flex-grow: 1; flex-basis: 0px;">Scripted no-downtime database reconfiguration, which was leveraged by 3 teams to update 168 instances.</text>
|
|
||||||
</view>
|
|
||||||
|
|
||||||
<view style="display: flex; flex-direction: row;">
|
|
||||||
<text style="color: rgb(23, 23, 23); font-weight: bold; padding-left: 6pt; padding-right: 6pt; line-height: 1.35; margin-top: 0pt;">•</text>
|
|
||||||
<text style="color: rgb(23, 23, 23); font-weight: normal; line-height: 1.35; flex-grow: 1; flex-basis: 0px;">Automated infrastructure patching for 30 microservices and 25 database clusters by creating a modular and testable Bash script framework.</text>
|
<text style="color: rgb(23, 23, 23); font-weight: normal; line-height: 1.35; flex-grow: 1; flex-basis: 0px;">Automated infrastructure patching for 30 microservices and 25 database clusters by creating a modular and testable Bash script framework.</text>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
<view style="display: flex; flex-direction: row;">
|
|
||||||
<text style="color: rgb(23, 23, 23); font-weight: bold; padding-left: 6pt; padding-right: 6pt; line-height: 1.35; margin-top: 0pt;">•</text>
|
|
||||||
<text style="color: rgb(23, 23, 23); font-weight: normal; line-height: 1.35; flex-grow: 1; flex-basis: 0px;">Administered on-call training, including 6 chaos tests gamedays across 5 systems.</text>
|
|
||||||
</view>
|
|
||||||
|
|
||||||
|
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
<view style="display: flex; flex-direction: row; justify-content: space-between; margin-top: 4.5pt;">
|
<view style="display: flex; flex-direction: row; justify-content: space-between; margin-top: 4.5pt;">
|
||||||
<text style="color: rgb(23, 23, 23); font-weight: normal;">Software Engineer I</text>
|
<text style="color: rgb(23, 23, 23); font-weight: normal; font-style: italic;" class="resume-headings-i-headings-i-headings-i-title">Software Engineer I</text>
|
||||||
<text style="color: rgb(23, 23, 23); font-weight: normal;">Feb 2018 - Oct 2019
|
<text style="color: rgb(23, 23, 23); font-weight: normal; font-size: 9.5pt;">Feb 2018 - Oct 2019
|
||||||
</text>
|
</text>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
@@ -172,13 +211,13 @@
|
|||||||
|
|
||||||
|
|
||||||
<view style="display: flex; flex-direction: row;">
|
<view style="display: flex; flex-direction: row;">
|
||||||
<text style="color: rgb(23, 23, 23); font-weight: bold; padding-left: 6pt; padding-right: 6pt; line-height: 1.35; margin-top: 0pt;">•</text>
|
<text style="color: rgb(23, 23, 23); font-weight: bold; padding-left: 6pt; padding-right: 6pt; line-height: 1.35; margin-top: 0pt;">•</text>
|
||||||
<text style="color: rgb(23, 23, 23); font-weight: normal; line-height: 1.35; flex-grow: 1; flex-basis: 0px;">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.</text>
|
<text style="color: rgb(23, 23, 23); font-weight: normal; line-height: 1.35; flex-grow: 1; flex-basis: 0px;">Founded Python tookit for full and incremental MongoDB backups, supporting partitioned deployments. The in-house standard for 21 teams.</text>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
<view style="display: flex; flex-direction: row;">
|
<view style="display: flex; flex-direction: row;">
|
||||||
<text style="color: rgb(23, 23, 23); font-weight: bold; padding-left: 6pt; padding-right: 6pt; line-height: 1.35; margin-top: 0pt;">•</text>
|
<text style="color: rgb(23, 23, 23); font-weight: bold; padding-left: 6pt; padding-right: 6pt; line-height: 1.35; margin-top: 0pt;">•</text>
|
||||||
<text style="color: rgb(23, 23, 23); font-weight: normal; line-height: 1.35; flex-grow: 1; flex-basis: 0px;">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.</text>
|
<text style="color: rgb(23, 23, 23); font-weight: normal; line-height: 1.35; flex-grow: 1; flex-basis: 0px;">Decreased internal service's annual outages by 91% and hardware costs by 40% via database migration. Scoped alternatives, projected costs, and designed cutover.</text>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
|
|
||||||
@@ -190,11 +229,11 @@
|
|||||||
|
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
<view style="display: flex; flex-direction: column; gap: 6pt; margin-top: 12pt;">
|
<view style="display: flex; flex-direction: column; gap: 6pt; margin-top: 9pt;">
|
||||||
<view style="display: flex; flex-direction: row; align-items: center;">
|
<view style="display: flex; flex-direction: row; align-items: center; font-size: 14pt;">
|
||||||
<view style="height: 3.75pt; width: 30pt; background-color: rgb(129, 140, 248); margin-right: 10.5pt;">
|
<view style="height: 3.75pt; width: 30pt; background-color: rgb(129, 140, 248); margin-right: 10.5pt;">
|
||||||
</view>
|
</view>
|
||||||
<text style="font-weight: bold; letter-spacing: 0.3pt;">EDUCATION</text>
|
<text style="font-weight: bold; letter-spacing: 0.3pt;" class="resume-headings-i-title">Education</text>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
|
|
||||||
@@ -203,7 +242,7 @@
|
|||||||
<view>
|
<view>
|
||||||
|
|
||||||
<view style="display: flex; flex-direction: row; justify-content: space-between; margin-top: 4.5pt;">
|
<view style="display: flex; flex-direction: row; justify-content: space-between; margin-top: 4.5pt;">
|
||||||
<text style="color: rgb(23, 23, 23); font-weight: bold;">Wake Forest University</text>
|
<text style="color: rgb(23, 23, 23); font-weight: bold;" class="resume-headings-i-headings-i-title-wo-headings">Wake Forest University</text>
|
||||||
<text style="color: rgb(23, 23, 23); font-weight: normal;"><no value>
|
<text style="color: rgb(23, 23, 23); font-weight: normal;"><no value>
|
||||||
</text>
|
</text>
|
||||||
</view>
|
</view>
|
||||||
@@ -223,32 +262,29 @@
|
|||||||
|
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
<view style="display: flex; flex-direction: column; gap: 6pt; margin-top: 12pt;">
|
<view style="display: flex; flex-direction: column; gap: 6pt; margin-top: 9pt;">
|
||||||
<view style="display: flex; flex-direction: row; align-items: center;">
|
<view style="display: flex; flex-direction: row; align-items: center; font-size: 14pt;">
|
||||||
<view style="height: 3.75pt; width: 30pt; background-color: rgb(129, 140, 248); margin-right: 10.5pt;">
|
<view style="height: 3.75pt; width: 30pt; background-color: rgb(129, 140, 248); margin-right: 10.5pt;">
|
||||||
</view>
|
</view>
|
||||||
<text style="font-weight: bold; letter-spacing: 0.3pt;">SKILLS</text>
|
<text style="font-weight: bold; letter-spacing: 0.3pt;" class="resume-headings-i-title">Skills</text>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
|
|
||||||
<view>
|
<view>
|
||||||
|
|
||||||
<view style="display: flex; flex-direction: row; justify-content: space-between;">
|
<view style="display: flex; flex-direction: row; justify-content: space-between;">
|
||||||
<text style="color: rgb(23, 23, 23); font-weight: bold; padding-left: 6pt; padding-right: 6pt; line-height: 1.35; margin-top: 0pt;">•
|
<text style="color: rgb(23, 23, 23); font-weight: bold; padding-left: 6pt; padding-right: 6pt; line-height: 1.35; margin-top: 0pt;">•
|
||||||
<text style="color: rgb(23, 23, 23); font-weight: normal;">Languages: Go (Golang), Bash, Python3
|
<text style="color: rgb(23, 23, 23); font-weight: normal;">Languages: Go (Golang), Bash, Python3</text>
|
||||||
</text>
|
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
<view style="display: flex; flex-direction: row; justify-content: space-between;">
|
<view style="display: flex; flex-direction: row; justify-content: space-between;">
|
||||||
<text style="color: rgb(23, 23, 23); font-weight: bold; padding-left: 6pt; padding-right: 6pt; line-height: 1.35; margin-top: 0pt;">•
|
<text style="color: rgb(23, 23, 23); font-weight: bold; padding-left: 6pt; padding-right: 6pt; line-height: 1.35; margin-top: 0pt;">•
|
||||||
<text style="color: rgb(23, 23, 23); font-weight: normal;">Platforms: Docker, Hashicorp, Linux/Unix, AWS, REST, Microservices, Git
|
<text style="color: rgb(23, 23, 23); font-weight: normal;">Platforms: Kubernetes, Temporal, Hashicorp, Linux/Unix, AWS, REST, Microservices</text>
|
||||||
</text>
|
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
<view style="display: flex; flex-direction: row; justify-content: space-between;">
|
<view style="display: flex; flex-direction: row; justify-content: space-between;">
|
||||||
<text style="color: rgb(23, 23, 23); font-weight: bold; padding-left: 6pt; padding-right: 6pt; line-height: 1.35; margin-top: 0pt;">•
|
<text style="color: rgb(23, 23, 23); font-weight: bold; padding-left: 6pt; padding-right: 6pt; line-height: 1.35; margin-top: 0pt;">•
|
||||||
<text style="color: rgb(23, 23, 23); font-weight: normal;">Datastores: MongoDB, Redis, S3, Couchbase, DynamoDB
|
<text style="color: rgb(23, 23, 23); font-weight: normal;">Datastores: PostgreSQL, MongoDB, Redis, S3, Couchbase, DynamoDB</text>
|
||||||
</text>
|
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
</view>
|
</view>
|
||||||
|
|||||||
Binary file not shown.
@@ -61,20 +61,19 @@
|
|||||||
</view>
|
</view>
|
||||||
|
|
||||||
{{ range .resume.headings }}
|
{{ range .resume.headings }}
|
||||||
<view style="display: flex; flex-direction: column; gap: 6pt; margin-top: 12pt;">
|
<view style="display: flex; flex-direction: column; gap: 6pt; margin-top: 9pt;">
|
||||||
<view style="display: flex; flex-direction: row; align-items: center;">
|
<view style="display: flex; flex-direction: row; align-items: center; font-size: 14pt;">
|
||||||
<view style="height: 3.75pt; width: 30pt; background-color: rgb(129, 140, 248); margin-right: 10.5pt;">
|
<view style="height: 3.75pt; width: 30pt; background-color: rgb(129, 140, 248); margin-right: 10.5pt;">
|
||||||
</view>
|
</view>
|
||||||
<text style="font-weight: bold; letter-spacing: 0.3pt;">{{ .title }}</text>
|
<text style="font-weight: bold; letter-spacing: 0.3pt;" class="resume-headings-i-title">{{ .title }}</text>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
{{ if .what }}
|
{{ if .what }}
|
||||||
<view>
|
<view>
|
||||||
{{ range .what }}
|
{{ range .what }}
|
||||||
<view style="display: flex; flex-direction: row; justify-content: space-between;">
|
<view style="display: flex; flex-direction: row; justify-content: space-between;">
|
||||||
<text style="color: rgb(23, 23, 23); font-weight: bold; padding-left: 6pt; padding-right: 6pt; line-height: 1.35; margin-top: 0pt;">•
|
<text style="color: rgb(23, 23, 23); font-weight: bold; padding-left: 6pt; padding-right: 6pt; line-height: 1.35; margin-top: 0pt;">•
|
||||||
<text style="color: rgb(23, 23, 23); font-weight: normal;">{{ . }}
|
<text style="color: rgb(23, 23, 23); font-weight: normal;">{{ . }}</text>
|
||||||
</text>
|
|
||||||
</view>
|
</view>
|
||||||
{{ end }}
|
{{ end }}
|
||||||
</view>
|
</view>
|
||||||
@@ -83,10 +82,12 @@
|
|||||||
{{ range .headings }}
|
{{ range .headings }}
|
||||||
<view>
|
<view>
|
||||||
{{ if .headings }}
|
{{ if .headings }}
|
||||||
<text style="color: rgb(23, 23, 23); font-weight: bold;">{{ .title }}</text>
|
<span style="font-size: 14pt;">
|
||||||
|
<text style="color: rgb(23, 23, 23); font-weight: bold;" class="resume-headings-i-headings-i-title-w-headings">{{ .title }}</text>
|
||||||
|
</span>
|
||||||
{{ else }}
|
{{ else }}
|
||||||
<view style="display: flex; flex-direction: row; justify-content: space-between; margin-top: 4.5pt;">
|
<view style="display: flex; flex-direction: row; justify-content: space-between; margin-top: 4.5pt;">
|
||||||
<text style="color: rgb(23, 23, 23); font-weight: bold;">{{ .title }}</text>
|
<text style="color: rgb(23, 23, 23); font-weight: bold;" class="resume-headings-i-headings-i-title-wo-headings">{{ .title }}</text>
|
||||||
<text style="color: rgb(23, 23, 23); font-weight: normal;">{{ .when }}
|
<text style="color: rgb(23, 23, 23); font-weight: normal;">{{ .when }}
|
||||||
</text>
|
</text>
|
||||||
</view>
|
</view>
|
||||||
@@ -101,8 +102,8 @@
|
|||||||
|
|
||||||
{{ range .headings }}
|
{{ range .headings }}
|
||||||
<view style="display: flex; flex-direction: row; justify-content: space-between; margin-top: 4.5pt;">
|
<view style="display: flex; flex-direction: row; justify-content: space-between; margin-top: 4.5pt;">
|
||||||
<text style="color: rgb(23, 23, 23); font-weight: normal;">{{ .title }}</text>
|
<text style="color: rgb(23, 23, 23); font-weight: normal; font-style: italic;" class="resume-headings-i-headings-i-headings-i-title">{{ .title }}</text>
|
||||||
<text style="color: rgb(23, 23, 23); font-weight: normal;">{{ .when }}
|
<text style="color: rgb(23, 23, 23); font-weight: normal; font-size: 9.5pt;">{{ .when }}
|
||||||
</text>
|
</text>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
@@ -110,7 +111,7 @@
|
|||||||
|
|
||||||
{{ range .what }}
|
{{ range .what }}
|
||||||
<view style="display: flex; flex-direction: row;">
|
<view style="display: flex; flex-direction: row;">
|
||||||
<text style="color: rgb(23, 23, 23); font-weight: bold; padding-left: 6pt; padding-right: 6pt; line-height: 1.35; margin-top: 0pt;">•</text>
|
<text style="color: rgb(23, 23, 23); font-weight: bold; padding-left: 6pt; padding-right: 6pt; line-height: 1.35; margin-top: 0pt;">•</text>
|
||||||
<text style="color: rgb(23, 23, 23); font-weight: normal; line-height: 1.35; flex-grow: 1; flex-basis: 0px;">{{ . }}</text>
|
<text style="color: rgb(23, 23, 23); font-weight: normal; line-height: 1.35; flex-grow: 1; flex-basis: 0px;">{{ . }}</text>
|
||||||
</view>
|
</view>
|
||||||
{{ end }}
|
{{ end }}
|
||||||
|
|||||||
@@ -18,31 +18,82 @@ resume:
|
|||||||
link: https://linkedin.com/in/breeldev
|
link: https://linkedin.com/in/breeldev
|
||||||
svg: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" style="width: 13pt; height: 13pt; fill: rgb(82, 82, 82);"><path d="M416 32H31.9C14.3 32 0 46.5 0 64.3v383.4C0 465.5 14.3 480 31.9 480H416c17.6 0 32-14.5 32-32.3V64.3c0-17.8-14.4-32.3-32-32.3zM135.4 416H69V202.2h66.5V416zm-33.2-243c-21.3 0-38.5-17.3-38.5-38.5S80.9 96 102.2 96c21.2 0 38.5 17.3 38.5 38.5 0 21.3-17.2 38.5-38.5 38.5zm282.1 243h-66.4V312c0-24.8-.5-56.7-34.5-56.7-34.6 0-39.9 27-39.9 54.9V416h-66.4V202.2h63.7v29.2h.9c8.9-16.8 30.6-34.5 62.9-34.5 67.2 0 79.7 44.3 79.7 101.9V416z"></path></svg>'
|
svg: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" style="width: 13pt; height: 13pt; fill: rgb(82, 82, 82);"><path d="M416 32H31.9C14.3 32 0 46.5 0 64.3v383.4C0 465.5 14.3 480 31.9 480H416c17.6 0 32-14.5 32-32.3V64.3c0-17.8-14.4-32.3-32-32.3zM135.4 416H69V202.2h66.5V416zm-33.2-243c-21.3 0-38.5-17.3-38.5-38.5S80.9 96 102.2 96c21.2 0 38.5 17.3 38.5 38.5 0 21.3-17.2 38.5-38.5 38.5zm282.1 243h-66.4V312c0-24.8-.5-56.7-34.5-56.7-34.6 0-39.9 27-39.9 54.9V416h-66.4V202.2h63.7v29.2h.9c8.9-16.8 30.6-34.5 62.9-34.5 67.2 0 79.7 44.3 79.7 101.9V416z"></path></svg>'
|
||||||
headings:
|
headings:
|
||||||
- title: WORK EXPERIENCE
|
- title: Work Experience
|
||||||
headings:
|
headings:
|
||||||
|
- title: Render
|
||||||
|
headings:
|
||||||
|
- title: Senior Software Engineer
|
||||||
|
when: May 2025 - Present
|
||||||
|
what:
|
||||||
|
- Cut new PostgreSQL major version support development cost from 8 weeks to 1 week.
|
||||||
|
# refactored + go generated + templated CI from PG17 to PG18
|
||||||
|
# had to wait 4w for TimescaleDB to ship, but no active time for us
|
||||||
|
- Reduced point-in-time-recovery restore failure volume 60% and restore runtime up to 80% with dynamic tuning.
|
||||||
|
# 40k paid, 30k free in 2025-12
|
||||||
|
# performance tuning -> PGExport queries
|
||||||
|
# pitr -> pitr holes, synchronous success tracking
|
||||||
|
# -50% restore failure rate by limiting postgresql.conf memory
|
||||||
|
# increment backups after 10k WAL files (1h of replay)
|
||||||
|
# render_pg_archive.sh synchronously tracks PITR health
|
||||||
|
#- Shipped autoscaling storage, in-place managed credential rotation
|
||||||
|
- title: Software Engineer
|
||||||
|
when: Dec 2023 - May 2025
|
||||||
|
what:
|
||||||
|
- Crafted PostgreSQL low-downtime migrations and in-place major version upgrades.
|
||||||
|
# PGUpgrades
|
||||||
|
# continuous canary testing matrix
|
||||||
|
# 3 major version targets
|
||||||
|
# FCR
|
||||||
|
# all-in-one solution for cross-region, cross-account, cross-provider migrations
|
||||||
|
# via physical replication
|
||||||
|
# customer-triggered promotion
|
||||||
|
# coupled to power HIPAA migration
|
||||||
- title: Qualtrics
|
- title: Qualtrics
|
||||||
headings:
|
headings:
|
||||||
- title: Senior Software Engineer, Team Lead
|
- title: Senior Software Engineer, Team Lead
|
||||||
when: May 2022 - Present
|
when: May 2022 - Dec 2023
|
||||||
what:
|
what:
|
||||||
- Optimized a Go application to increase consumption rate from Kafka by 340%, costing half the engineering effort of the proposed rewrite.
|
- 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.
|
# Atlas QMP Consumer
|
||||||
|
# optimized garbage collection of many small objects
|
||||||
|
# from maps and allocs to pointers and slices
|
||||||
|
#- 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.
|
- Spearheaded AWS asset replication tooling, sparing 9 teams from duplicating work relocating up to 7 AWS technologies each.
|
||||||
|
# Scanned AWS assets -> interactive script replicated configs to new AWS region
|
||||||
|
# cloned S3, SQS, SNS, DynamoDB assets
|
||||||
- Mentored 2 intern, 2 new grad, and 4 mid-level engineers on operational tools, best practices for maintainable software, and career development.
|
- 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.
|
- Founded the in-house standard system to continuously verify 16 teams' compliance with disaster recovery requirements.
|
||||||
|
# Mongosback backup-check lists S3 for last backup timestamp
|
||||||
- Created automated release test suites for 11 services, which catches 10 would-be customer facing bugs per month on average.
|
- Created automated release test suites for 11 services, which catches 10 would-be customer facing bugs per month on average.
|
||||||
|
# CRUDdy
|
||||||
|
# tied to Nomad spec
|
||||||
|
# on boot, healthchecks fail for new instance until e2e tests pass per-instance
|
||||||
|
# blocked releases to staging
|
||||||
- title: Software Engineer II
|
- title: Software Engineer II
|
||||||
when: Oct 2019 - May 2022
|
when: Oct 2019 - May 2022
|
||||||
what:
|
what:
|
||||||
- "Scripted no-downtime database reconfiguration, which was leveraged by 3 teams to update 168 instances."
|
#- "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.
|
- 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.
|
# Nexpose-Remediations
|
||||||
|
# Couchbase, Mongo, GaleraDB covered
|
||||||
|
# spindown, isSpindownComplete, patch, reboot, pollRebooted, spinup, isSpinupComplete
|
||||||
|
# used cross-team for all Mongo instances
|
||||||
|
# bash tested via `source unit_test_setup.sh; test my_method`
|
||||||
|
#- Administered on-call training, including 6 chaos tests gamedays across 5 systems.
|
||||||
- title: Software Engineer I
|
- title: Software Engineer I
|
||||||
when: Feb 2018 - Oct 2019
|
when: Feb 2018 - Oct 2019
|
||||||
what:
|
what:
|
||||||
- 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.
|
- Founded Python tookit for full and incremental MongoDB backups, supporting partitioned deployments. The in-house standard for 21 teams.
|
||||||
- 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.
|
# Mongosback
|
||||||
- title: EDUCATION
|
# Python3 script
|
||||||
|
# Handles sharded AND replica sets
|
||||||
|
# watches for any shard in progress AND replica set healthy enough to continue
|
||||||
|
- Decreased internal service's annual outages by 91% and hardware costs by 40% via database migration. Scoped alternatives, projected costs, and designed cutover.
|
||||||
|
# Couchbase for GENI (MaraudersMap) was a mess
|
||||||
|
# indexes just kinda disappeared, meaning table scans often
|
||||||
|
# evaluated Mongo, Galera, CockroachDB
|
||||||
|
# Mongo ran with little RAM on laptop + fast startup + lowest latency
|
||||||
|
- title: Education
|
||||||
headings:
|
headings:
|
||||||
- title: Wake Forest University
|
- title: Wake Forest University
|
||||||
not-when: Dec 2017
|
not-when: Dec 2017
|
||||||
@@ -58,10 +109,9 @@ resume:
|
|||||||
# when: Jun 2018
|
# when: Jun 2018
|
||||||
# what:
|
# what:
|
||||||
# - Refactored to correct bugs and improve efficiency by orders of magnitude
|
# - Refactored to correct bugs and improve efficiency by orders of magnitude
|
||||||
- title: SKILLS
|
- title: Skills
|
||||||
what:
|
what:
|
||||||
- 'Languages: Go (Golang), Bash, Python3'
|
- 'Languages: Go (Golang), Bash, Python3'
|
||||||
- 'Platforms: Docker, Hashicorp, Linux/Unix, AWS, REST, Microservices, Git'
|
- 'Platforms: Kubernetes, Temporal, Hashicorp, Linux/Unix, AWS, REST, Microservices'
|
||||||
- 'Datastores: MongoDB, Redis, S3, Couchbase, DynamoDB'
|
- 'Datastores: PostgreSQL, MongoDB, Redis, S3, Couchbase, DynamoDB'
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user