Added core content for hardware test engineer page
All checks were successful
Build and Test - Staging / test (pull_request) Successful in 4m13s
Build and Test - Staging / build_and_push (pull_request) Successful in 3m0s
Build and Test - Staging / deploy_staging (pull_request) Successful in 3s

This commit is contained in:
2025-12-11 14:44:16 -08:00
parent 2583e4e99b
commit 52eac520e8
10 changed files with 371 additions and 60 deletions

View File

@@ -4,6 +4,7 @@ ASSEM
astrojs
Atmel
barebones
Bitwarden
Candian
caperren
CEOAS
@@ -13,6 +14,8 @@ CONSERV
Corwin
dangerousthings
Dechorionator
dockerization
dockerizing
ebox
fhhs
flowbite
@@ -39,6 +42,7 @@ OSURC
Perren
Perren's
Pixhawk
Protocase
pubpath
RFID
RSSI
@@ -50,7 +54,9 @@ ssds
Starlink
steller
Steller
Teamcenter
timelapse
triaging
trivago
Unstow
uuidv

Binary file not shown.

After

Width:  |  Height:  |  Size: 600 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 701 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 MiB

View File

@@ -13,7 +13,6 @@ export const siteLayout: navLink[] = [
path: "spacex",
children: [
{
enabled: false,
navText: "Hardware Test Engineer I/II",
path: "hardware-test-engineer-i-ii",
},

View File

@@ -104,7 +104,7 @@ const categorizedSkills: categorySkills[] = [
skills: [
{ item: "Git" },
{
item: "Programming Languages",
item: "Programming",
subItems: [
{ item: "Python 2/3" },
{ item: "Bash Shell Scripting" },

View File

@@ -42,13 +42,18 @@ const categorizedSkills: categorySkills[] = [
skills: [
{ item: "Git" },
{
item: "Programming Languages",
item: "Programming",
subItems: [
{ item: "Python 2/3" },
{ item: "Bash Shell Scripting" },
{ item: "Microsoft SQL" },
],
},
{
item: "Methodologies",
subItems: [{ item: "Test Driven Development" }, { item: "Agile" }],
},
{
item: "Atlassian Suite",
subItems: [

View File

@@ -1,16 +1,29 @@
---
import Carousel from "@components/Media/CustomCarousel/CustomCarousel.astro";
import Timeline from "@components/Timeline/Timeline.astro";
import ExperienceLayout from "@layouts/ExperienceLayout.astro";
import starlink_headquarters_selfie from "@assets/experience/spacex/hardware-test-engineer-i-ii/starlink-headquarters-selfie.jpg";
import H2 from "@components/H2.astro";
import H3 from "@components/H3.astro";
import InlineLink from "@components/InlineLink.astro";
import Li from "@components/Li.astro";
import Carousel from "@components/Media/CustomCarousel/CustomCarousel.astro";
import PageGroup from "@components/PageGroup.astro";
import Paragraph from "@components/Paragraph.astro";
import Paragraphs from "@components/Paragraphs.astro";
import SkillMatrix from "@components/SkillMatrix/SkillMatrix.astro";
import Timeline from "@components/Timeline/Timeline.astro";
import Ul from "@components/Ul.astro";
import type { carouselGroup } from "@interfaces/image-carousel.ts";
import type { categorySkills } from "@interfaces/skill-matrix.ts";
import type { timelineEntry } from "@interfaces/timeline.ts";
import five_year_patch from "@assets/experience/spacex/hardware-test-engineer-i-ii/five-year-patch.jpg";
import starlink_headquarters_selfie from "@assets/experience/spacex/hardware-test-engineer-i-ii/starlink-headquarters-selfie.jpg";
import starlink_patch from "@assets/experience/spacex/hardware-test-engineer-i-ii/starlink-patch.jpg";
const headerCarouselGroup: carouselGroup = {
animation: "slide",
images: [starlink_headquarters_selfie],
images: [starlink_headquarters_selfie, five_year_patch, starlink_patch],
};
const timeline: timelineEntry[] = [
@@ -43,56 +56,343 @@ const timeline: timelineEntry[] = [
"Celebrated five and a half years of helping put thousands of satellites, and dozens of rockets, into orbit",
},
];
const categorizedSkills: categorySkills[] = [
{
category: "Software & Environments",
skills: [
{
item: "Version Control",
subItems: [{ item: "Git" }, { item: "Subversion" }],
},
{
item: "Programming",
subItems: [
{
item: "Languages",
subItems: [
{ item: "Python 2/3" },
{ item: "Bash Shell Scripting" },
{ item: "High-Level Embedded C/C++ (Arduino/Teensy)" },
{ item: "HTML" },
{ item: "CSS" },
{ item: "Typescript/Javascript" },
],
},
{
item: "Databases",
subItems: [
{ item: "Postgres" },
{ item: "Microsoft SQL" },
{ item: "MySQL" },
],
},
{ item: "DevOps", subItems: [{ item: "Ansible" }] },
],
},
{
item: "Methodologies",
subItems: [{ item: "Test Driven Development" }, { item: "Agile" }],
},
{
item: "Automation",
subItems: [{ item: "NI MAX/VISA" }, { item: "RESTful APIs" }],
},
{
item: "Operating Systems",
subItems: [
{
item: "Linux",
subItems: [{ item: "Centos" }, { item: "Ubuntu" }, { item: "WSL" }],
},
{ item: "Microsoft Windows" },
],
},
{
item: "Applications",
subItems: [
{
item: "Atlassian",
subItems: [
{ item: "Jira" },
{ item: "Bitbucket" },
{ item: "Confluence" },
],
},
{
item: "Monitoring/Metrics",
subItems: [
{ item: "Grafana" },
{ item: "Sentry" },
{ item: "OpsGenie" },
],
},
{
item: "Secrets",
subItems: [{ item: "Bitwarden" }, { item: "Hashicorp Vault" }],
},
],
},
],
},
{
category: "Electrical",
skills: [
{
item: "Schematic & PCB Design",
subItems: [
{ item: "Altium Designer" },
{ item: "Mentor Graphics PADS" },
],
},
{
item: "Electrical Diagnostics",
subItems: [
{ item: "Multimeters" },
{ item: "Oscilloscopes" },
{ item: "Logic Analyzers" },
{ item: "LCR Meters" },
],
},
{
item: "Harnessing Fabrication",
subItems: [
{ item: "DC Power & Signal" },
{ item: "Low Frequency RF (<1GHz)" },
],
},
],
},
{
category: "Mechanical",
skills: [
{ item: "Siemens Teamcenter PLM" },
{
item: "3D Modeling",
subItems: [
{ item: "Siemens NX" },
{ item: "Protocase Designer" },
{ item: "FreeCAD" },
],
},
],
},
{
category: "Other",
skills: [
{
item: "Specialty Tests",
subItems: [
{ item: "Highly Accelerated Life Testing" },
{ item: "Thermal Vacuum Chamber Testing" },
{ item: "Vibration Testing" },
],
},
],
},
];
---
<ExperienceLayout title="SpaceX - Hardware Test Engineer I/II">
<ExperienceLayout
title="Hardware Test Engineer I/II"
subTitles={["Space Exploration Technologies Corporation"]}
>
<Carousel carouselGroup={headerCarouselGroup} />
<h2 class="my-4 font-bold md:text-2xl">Summary</h2>
<h3 class="my-4 font-bold md:text-lg">Timeline</h3>
<Timeline timeline={timeline} />
<h3 class="my-4 font-bold md:text-lg">Key Takeaways</h3>
<ul class="list-inside list-disc">
<li>
Created test systems which validated ~4500 Starlink satellite flight
computers, and ~4000 power boards
</li>
<li>
Developed program-critical infrastructure that enabled efficient triage,
management, and tracking of hardware failures
</li>
<li>
Designed and deployed automated, unified, and containerized infrastructure
to greatly increase application reliability and development speed
</li>
</ul>
<h3 class="my-4 font-bold md:text-lg">Skills Used</h3>
<div
class="border-caperren-green relative grid grid-flow-row gap-6 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4"
>
<div>
<div class="text-sm font-extrabold">Software</div>
<hr class="text-caperren-green" />
<ul class="list-inside list-disc text-sm">
<li>Python</li>
<li>Test Driven Development</li>
</ul>
</div>
<div>
<div class="text-sm font-extrabold">Electrical</div>
<hr class="text-caperren-green" />
</div>
<div>
<div class="text-sm font-extrabold">Mechanical</div>
<hr class="text-caperren-green" />
</div>
<div>
<div class="text-sm font-extrabold">Other</div>
<hr class="text-caperren-green" />
</div>
</div>
<h2 class="my-4 font-bold md:text-2xl">Details By Team</h2>
<h3 class="my-4 font-bold md:text-lg">Starlink Hardware Test</h3>
<h3 class="my-4 font-bold md:text-lg">Build Reliability Engineering</h3>
<h3 class="my-4 font-bold md:text-lg">Components Test Infrastructure</h3>
<PageGroup>
<Fragment slot="header"><H2>Summary</H2></Fragment>
<PageGroup>
<Fragment slot="header"><H3>Timeline</H3></Fragment>
<Timeline timeline={timeline} />
</PageGroup>
<PageGroup>
<Fragment slot="header"><H3>Key Takeaways</H3></Fragment>
<Ul>
<Li
>Created test systems which validated ~4500 Starlink satellite flight
computers, and ~4000 power boards</Li
>
<Li
>Developed program-critical infrastructure that enabled efficient
triage, management, tracking, and metrics of hardware failures</Li
>
<Li
>Designed and deployed automated, unified, and containerized
infrastructure to greatly increase application reliability and
development speed</Li
>
<Li
>Provided on-call support for on-orbit hardware,
satellite-test/components-test systems, and
satellite-test/components-test infrastructure</Li
>
</Ul>
</PageGroup>
<SkillMatrix categorizedSkills={categorizedSkills} />
</PageGroup>
<PageGroup>
<Fragment slot="header"><H2>Details</H2></Fragment>
<PageGroup>
<Fragment slot="header"><H3>Starlink Test Engineering</H3></Fragment>
<Paragraphs>
<Paragraph>
Starting at SpaceX, I'd joined the hardware test engineering team for
the Starlink program in Redmond, WA. With my first day being in early
September of 2019, the V0.9 revision satellites had only just been
shot into space a few months prior. This meant my start coincided with
earnest preparations to launch V1.0, as well as ramping production to
rates previously thought impossible for space industries. My initial
task at the company was simple; offload the current hardware test
engineer for flight computer in any way possible, as he was
significantly overloaded.
</Paragraph>
<Paragraph>
I put my all into this task, immediately taking over quite a few
production code debug and improvement tasks, as well as running EMI
compliance testing, while absorbing as much as I could about the
product, its test systems, and test procedures. During this time, I
was extremely happy to have already done a <InlineLink
href="/experience/spacex/avionics-test-engineering-internship"
>test engineering internship</InlineLink
> with the company, as it made ramping up much faster and easier than it
would have been otherwise. Around three months after joining the team, ownership
of these test systems were transferred to me in their entirety. What followed
was nearly three years of the kind of intensity you'd expect out of a company
like SpaceX, but with the unique addition of higher production rates than
anywhere else in the company, or space industry.
</Paragraph>
<Paragraph>
When I say I took ownership of flight computer test systems, I mean
this in its entirety, and specifically a multi-disciplinary sense. I
handled high-level test rack designs, purchasing, test fixture
enclosure design, test fixture PCB design, test fixture firmware
development, test rack networking configuration, test rack server
configuration and tuning, DUT harness design, prototype DUT harness
fabrication, along with test software development to cover not only
production tests, but also more strenuous qualification tests which
often required their own custom rack design compared to their
production counterparts. This barely scratches the surface in reality,
and doesn't include the countless nights on the production floor,
personally running hundreds of boards through functional and
environment testing, slowly and consistently improving the quality,
rate, and coverage of the tests. It also doesn't include the whole
year where I was on-call 24/7 for a full week, every other week,
triaging on-orbit alerts for flight computer, reviewing data, and
sending commands to recover where needed.
</Paragraph>
<Paragraph>
As time progressed, I began to burn out and requested transfer to a
different product. Flight computer was a particularly intense product
due to having little to no overlap with the rest of the satellite
sub-systems, and being doubly critical functionality-wise to satellite
operation. I was given a new test system for power boards, but due to
unfortunate timing, the new owner for flight computer changed
companies and I ended up having to temporarily take over test rack
hardware design, alongside permanently handling the software for
flight computer through the end of this overall phase at SpaceX. This
turned out to be the most intense period of time at the company for
me, with some of the longest hours and latest nights that I'd rather
not share the durations of. However, as with all the time previously,
I successfully delivered multiple test system derivations for power
board, alongside all the software for multiple of the next generation
of flight computer.
</Paragraph>
</Paragraphs>
<PageGroup>
<Fragment slot="header"><H3>Build Reliability Engineering</H3></Fragment
>
<Paragraphs>
<Paragraph>
In early 2022, I decided I was going to move in with my
long-distance partner down in Oregon. SpaceX is not normally known
for allowing remote work, but I floated the idea a few months before
my August deadline for leaving, just in case. My good friend, and
head of the build reliability engineering team at the time, also
proposed a project for me to work on that would enable fast triage
and disposition of hardware failures coming out of test. I'd
previously taught him some basic web development to get a prototype
version of the app up and running, but it was fast approaching its
usability limits and needed professional support. They approved me
to work on this for three months, with the stipulation that I came
in person for one week a month. Since it was going to be short term,
I agreed and began working on this website!
</Paragraph>
<Paragraph>
This level of web development was rather new to me, at the time, as
I'd always said I'd never become a full time web developer since
before even starting college. Still, that wasn't going to stop me,
and I quickly began making improvements. One thing SpaceX had
already taught me was that development velocity was paramount, and
that there should be as little friction as possible between changes
getting made, becoming validated, and then deployed. So, I started
by creating a fully automated development/staging/production devops
environment, and moved the application to docker with a RESTful
flask backend and Bootstrap frontend. After three months were up,
they decided to let me keep working remote so long as I still came
in a week a month. For the next year and a half, this tool grew and
improved, gaining hundreds of users a day both in and out of the
reliability team. It turned out that many features of my website
ended up providing a better experience than the ones developed by
SpaceX's core applications engineering team, at least for Starlink's
use-case. This did not go unnoticed, and that team ended up reaching
out to create an equivalent, and officially supported, first-party
tool in the SpaceX application ecosystem. They even created a small
team dedicated to its creation and maintenance. This also came at a
perfect time, as I was losing my ability to keep up with my custom
website as a solo developer. Oh, and did I mentioned I'd been
supporting satellite hardware test remotely for the latter nine
months at this time, as well?
</Paragraph>
</Paragraphs>
</PageGroup>
<PageGroup>
<Fragment slot="header"><H3>Components Test Engineering</H3></Fragment>
<Paragraphs>
<Paragraph>
In March of 2024, the team lead for components test software (the
components team being the parent group of satellite hardware test by
that point) reached out and asked me if I wanted to join a small two
person infrastructure team. Considering my remote nature, this made
a lot more sense than trying to continue supporting satellite
hardware tests, and I was going to be able to provide a lot of
experience with devops infrastructure and docker that could greatly
benefit the team. I agreed, and began working on dockerization and
unification of the team's tools into a monorepo. I also began
supporting a relatively new tool for running test software that the
team was developing, along with a small slew of miscellaneous tools
such as those to image and provision servers over PXE.
</Paragraph>
<Paragraph>
After dockerizing all the infrastructure and moving them into the
monorepo, my next push was to improve velocity and reliability by
adding automated build, test, and deploy tasks for new development,
staging, and production environments across them all. I did this by
combining a unified set of Makefile interfaces, and run via ansible
for pull requests and main branch merges. Application and server
monitoring was also added via tools such as Sentry and Grafana,
which were piped into OpsGenie so the infra team could be pinged
during outages. Backups were also made of production databases
during deployments, with restore tooling that could also be used for
emulating production data during staging, developments, and local
deploys. Overall, these changes greatly improved the speed at which
the team could develop, and helped ensure that what we were
deploying was validated as thoroughly as possible in advance.
</Paragraph>
<Paragraph>
At the end of January 2025, I was notified by the company that my
remote work exception would no longer be valid as of April 4th. I
was now living in northern Washington state and close to a two hour
drive, each way, from the closest SpaceX facility. I therefore opted
to quit after roughly six years with them in total. Considering the
average is two to three years, I'd say I did quite well, all things
considered, and am very proud of what I managed to achieve with the
company in that time! If you'd like to know more, feel free to
contact me, and I'm happy to share what I'm allowed! This summary
was ultimately just the tip of the iceberg.
</Paragraph>
</Paragraphs>
</PageGroup>
</PageGroup>
</PageGroup>
</ExperienceLayout>

View File

@@ -1,7 +1,8 @@
---
import Carousel from "@components/Media/CustomCarousel/CustomCarousel.astro";
import HobbyLayout from "@layouts/HobbyLayout.astro";
import Carousel from "@components/Media/CustomCarousel/CustomCarousel.astro";
import type { carouselGroup } from "@interfaces/image-carousel.ts";
import enclosure_front_pc_panel_open from "@assets/hobby/homelab/offsite-backup-rack/enclosure-front-pc-panel-open.jpg";
@@ -10,6 +11,7 @@ import enclosure_left from "@assets/hobby/homelab/offsite-backup-rack/enclosure-
import enclosure_rear from "@assets/hobby/homelab/offsite-backup-rack/enclosure-rear.jpg";
import enclosure_right from "@assets/hobby/homelab/offsite-backup-rack/enclosure-right.jpg";
import enclosure_with_ups from "@assets/hobby/homelab/offsite-backup-rack/enclosure-with-ups.jpg";
import installed from "@assets/hobby/homelab/offsite-backup-rack/installed.jpg";
import power_adapter_tray_and_dc_dc from "@assets/hobby/homelab/offsite-backup-rack/power-adapter-tray-and-dc-dc.jpg";
import power_supply_closeup from "@assets/hobby/homelab/offsite-backup-rack/power-supply-closeup.jpg";
import power_supply_mounting_location from "@assets/hobby/homelab/offsite-backup-rack/power-supply-mounting-location.jpg";
@@ -20,6 +22,7 @@ import up_and_running from "@assets/hobby/homelab/offsite-backup-rack/up-and-run
const headerCarouselGroup: carouselGroup = {
animation: "slide",
images: [
installed,
enclosure_front,
enclosure_front_pc_panel_open,
enclosure_left,
@@ -38,6 +41,4 @@ const headerCarouselGroup: carouselGroup = {
<HobbyLayout title="Homelab - Offsite Backup Rack">
<Carousel carouselGroup={headerCarouselGroup} />
<!--<h2 class="font-bold md:text-2xl my-4">Prior Homelab</h2>-->
</HobbyLayout>

View File

@@ -32,7 +32,7 @@ const categorizedSkills: categorySkills[] = [
],
},
{
item: "Programming Languages",
item: "Programming",
subItems: [
{ item: "HTML" },
{ item: "CSS" },