Bye SFI, hello ExtraHop

After much deliberation and soul-searching I’m changing jobs. Next Monday, November 26th is my last day at Spaceflight Industries. I will then have 3 glorious weeks of vacation before I start my new job at ExtraHop as a lead on their performance team.

I gave notice a month ago but I wanted to stay at SFI to support my team through our first commercial satellite launch — a launch that was suppose to take place today but is now delayed (the challenges of planning around rocket launches was one factor in my decision to leave the aerospace industry).

I’ve learned a great deal during my 2.5 years at Spaceflight Industries. I’ve worked with some brilliant and hardworking people, whom I will miss, and together we solved some really challenging problems in ingenious ways. I appreciate that SFI was willing to take a chance on me being a manager and giving me the flexibility to explore what that looked like for me.

That said, I’m looking forward to stepping back into an individual contributor position. While I’m told I was a good people manager it didn’t feed my soul and I found it really draining. I’ve had some really great managers over the past 18 years and attempting to live up to the high standards I set for myself was exhausting. I’m not ruling out going back into it in the future, but for now I’m excited to sink my teeth into some gnarly technical problems and to sling some code with the rest of the performance team.

I’m also looking forward to working, albeit indirectly, with the esteemed Jeena Khan and her team of writers! Frankly, I’m not certain ExtraHop knows what they’ve gotten themselves into with Jeena and I working together again. The building might not be able to contain our mutual enthusiasm!

Constellation orchestration with Gemini

This is a company blog post I wrote about Gemini, the cloud-based constellation orchestration software my team and I created at Spaceflight Industries. I’m duplicating it here from the original that was posted on 2018/11/12 for posterity.

Constellation Orchestration using the Cloud

Since the launch of Pathfinder-1 two years ago, the BlackSky ground and control team has been working on Gemini, our internal name for our next-generation cloud-based constellation orchestration system. We’ve taken operator interactions with our first demonstration satellite Pathfinder-1 combined with lessons learned from our first-generation software and redesigned the system from the ground-up for fully-automated operations of our Global satellites. From the very beginning, Gemini was designed to scale up with our constellation.

Designed for fully-automated operations

The initial checkout of the satellite post-launch begins with our satellite operators. Satellite constellation operators use Gemini for manual commanding of Global satellites during launch and early operations to confirm the satellite is healthy in orbit. After checkout is complete, the operators take a step back and the satellite is handed over to Gemini automation. Gemini is responsible for orchestrating the tasking and downlink from the satellite, engaging the groundstations around the world to communicate with the satellite during contact passes, create and upload satellite mission tasking scripts, manage telemetry & health logs, and alert operators to any anomalous telemetry. The automation is designed to protect the satellite but as additional safeguard Gemini alerts operators in the event of anomalous behavior so that they can intervene if needed.

In addition, Gemini also:

  • plans images and tasks them across the entire constellation
  • orchestrates connectivity with multiple satellites around our world-wide network of groundstations
  • manages the radio chain & antenna tracking
  • propagates satellite and equipment telemetry in sub-seconds from groundstations to operator dashboards during contact passes
  • monitors the entire system in real-time and alerts on anomalies
  • provides infrastructure for our image processing pipeline, code-named Obscura internally, that does georeferencing and orthorectification and more
  • exposes web-based UIs to operators for manual satellite commanding in addition to insight into automated activities and constellation health

Cross-team development and validation

Gemini development was a collaborative effort using input from many cross-company teams to ensure that we could test the system in the same way we expected to use it while in space (as they say in aerospace: test what you fly, fly what you test). The Gemini development team worked closely with operators to design a system that provided the control and insight they needed for successful satellite operations. Our development team worked hand-in-hand with flight software and hardware AI&T teams to validate all radio, commanding, and telemetry interfaces. An agile development approach allowed operators and other stakeholders to request features and resolve issues through an iterative testing and release process.

Our validation team created multi-satellite constellations using virtual satellites — a novelty in the aerospace industry — to ensure our system scalability. They also created automated deployments and tests to run nightly against our physical test satellite (Flatsat) to validate end-to-end radio equipment functionality and full-system integration. This innovative testing showcases the robustness of our constellation automation ahead of launch and allows the cross-functional team to evaluate the space to ground system while still on Earth.

Under the hood

Gemini was built leveraging technologies and practices that, while common in many software development shops, are new to aerospace. Our microservices architecture runs on EC2 instances running CoreOS in Amazon GovCloud and in CoreOS virtual machines on top of VMware ESXi hosts in our groundstations around the world, allowing a unified architecture across these disparate environments. Microservices are coded in Python 3.6, primarily with asyncio/aiohttp, with a smattering of node.js and are deployed via Docker containers.

To handle the firehose of critical telemetry, both from the satellite as well as the groundstation systems, we propagate telemetry in real-time using Redis pubsub then store it in KairosDB/Cassandra and expose it to operators in Grafana dashboards. WebSockets are used for real-time service alerts and messages making them available nearly instantaneously to the user. Our Polymer-based operations UI allows for tight coupling between the microservice source of the data and the operator interface all while being presented together as a single cohesive interface. Using encapsulated web components allows quick deployment of new features and easy integration with third party tools.

We use the HashiCorp stack (Terraform, Consul, Vault, and Nomad) to manage our infrastructure as code, Gitlab for source management, and Pants/Concourse for builds.

Launch ready

We’re excited to put Gemini to work when the rubber meets the road with the upcoming Global launches!

Gairdeachas reimagined

I started playing D&D 16 years ago with some friends. In the game I played a human fighter named Gairdeachas, or Gairdy for short. Gairdy was a classic meat shield, being a strength-based fighter. Physically I pictured him as pretty much everything I wasn’t but wanted to be: big, strong, and muscular. By the end of the campaign Gairdy was terrified of shrubberies and heights after being attacked by the former and dying from the latter (he fell from a raised platform while fighting a tentacled brain monster and was raised back to life).

In 2004 one of us came across an online D&D avatar generator and we had fun creating pictures of our characters. The generator offered a variety of torsos, arm positions, weapons, etc. Shockingly, a version of it still exists today!

A couple of months ago I had the crazy idea of having Gairdy re-drawn based on me. After all, today I’m closer to the buff meat-head that I aspired to be 16 years ago. I had a really great experience getting sketched by local artist S. Pettit of Tumbled Heroes back in April and a few weeks ago I commissioned a piece by him based on the original. Yesterday he blew me away with an utterly fantastic reimagining of me as Gairdy. Here’s Gairdy of 2004 and 2018:

gairdeachas-full gairdeachas-full

I love everything about it, including how the new image retains some of the key visual elements of the original and artfully incorporates — but clearly embellishes — some of my physical attributes.

For over a decade a cropped version of the original has been my online avatar pretty much everywhere, including on Slack at work, Github, and everything that uses my Gravatar. The resolution of the original image was very low making larger thumbnails of it pixelated or blurry, although the smaller versions looked ok:

gairdeachas-128x128 gairdeachas-128x128 gairdeachas-128x128

The new image is super-high-resolution which makes for great images of any size:

gairdeachas-bust-500x500 gairdeachas-bust-500x500 gairdeachas-bust-500x500

The new image is a bit more revealing but some judicious cropping and it’s totally safe for work:

gairdeachas-bust-500x500 gairdeachas-bust-500x500 gairdeachas-bust-500x500

The colors and spirit of the pictures are similar enough I don’t expect it will be a drastic change for people expecting the person behind the “human against the red background” to be me.

gairdeachas-128x128 gairdeachas-bust-500x500

I can’t express how happy I am with the new drawing. Many thanks to S. Pettit for doing such an incredible job! All that’s left is for me to update my avatar everywhere.

Hello, 40

Today I turn 40. Far from being bothered by it, I’m riding high on life. I’m dating the most amazing man, surrounded by incredibly good friends and chosen family, living in a beautiful city, feeling really good about who I am in body & spirit, and looking forward to the years and decades ahead.

IMG_20181007_113941That isn’t to say that my life is perfect. My knees and back periodically act up, generally because of something I did at the gym. My metabolism has slowed down a bit so I can no longer eat with abandon. I expect this year will finally be the year I need to get reading glasses (I can’t complain after 40 years without glasses or contacts). The stress over the last two years about the shit-show that is our country hasn’t helped either. But on the whole my problems are of the champagne variety.

Thank you to everyone who has joined me through the last 40 years, be it for a few days, years, or decades. You have all influenced who I have become in ways I can never adequately convey. My life hasn’t alway been easy, despite my privilege, but I wouldn’t change anything about my journey and who I have become.