The Morning Routine

My day starts with a series of alarms — 6:28, then 6:30, and finally 6:34, which I know is the last one. Music gets me going; Sofi Tukker or Rufus Du Sol on Spotify usually does the trick. By 7:40 I'm at the gym for strength training, cardio, and stretching. After a shower and a 20-minute walk to the office — often with a podcast like On Purpose with Jay Shetty or Armchair Expert — I'm at my desk by 9:30.

Once settled, I check my unread Slack messages, which mix company announcements, team updates, and off-topic humor. My calendar shows a standup, a few 1:1s, and an afternoon meeting about our TypeScript migration.

Diving Into TypeScript's AST

My current task on the Foundations team is preparing the frontend codebase for widespread TypeScript adoption. Specifically, I'm writing a custom webpack transform that generates PropTypes definitions for React components written in TypeScript. The goal: maintain consistent prop validation as we migrate JavaScript to TypeScript, bridging the gap between compile-time and run-time validation.

A transform works by examining the abstract syntax tree (AST) — a structure that represents the code we write in a way machines can process. I was inspecting the node that enforces type definitions for React component props, intending to derive corresponding PropTypes from it. Fascinating as it is to look at a tree representation of human-readable code, I hit a puzzle: the node's values were all numbers, and some matched while others didn't. I set the question aside and headed to the team standup at 11:35, where we share updates, blockers, and next steps.

Lunch and the "Aha" Moment

At noon, I grab lunch with colleagues, often walking to nearby food trucks or hitting one of the office cafes. It's a good chance to connect over non-work topics — today we're comparing high school experiences, which for me involved Model UN, Pi-memorization contests, and student government.

Back at my desk by 12:45, I open VSCode and ask my teammate Andrew to pair on the AST number mystery. He suggests checking the TypeScript npm package for those values. A quick grep turns up a dictionary mapping the numbers to symbols — the syntax components of the language. The keys represent both primitive and non-primitive types, and the node values are references to specific types. Every TypeScript node in the tree resolves cleanly to a type we can convert to a React PropType. Problem solved.

Big-Picture Conversations

At 2:00 I meet with Mark, a principal engineer on our team. Our every-other-week 1:1s double as informal mentorship sessions — a chance to share updates, ask for feedback, and think about leadership and how my work fits into Slack's broader strategy.

By 3:00 I'm in a cross-functional meeting with two engineering managers, a backend engineer, and another frontend engineer. We're discussing the backend team's recent PHP-to-Hack migration as a case study for our own TypeScript adoption. The parallels are strong: both efforts aim to make code safer, more self-documenting, and easier to test through static types. We're after the learnings and gotchas that might help us avoid missteps as we roll TypeScript out across our monolithic codebase. As engineers know, change is constant — the trick is learning from those who've already navigated it.

Winding Down

By 5:30 I wrap up and head home. Leaving during rush hour in SoMa means a 45-minute shuttle ride despite living nearby. Dinner is usually simple — eggs and toast, leftovers, or nothing if it's Thursday and I've hit the weekly work happy hour. I'll unwind with some Bravo reality TV or Bon Appetit videos on YouTube, catching up with family by phone and text along the way.

About Natalie

Natalie is a senior frontend engineer at Slack. After starting on the New User Experience team, she moved to the Foundations team, where she works on frontend infrastructure to help other engineers be as productive as possible. She is currently leading the effort to introduce TypeScript across Slack's frontend codebase.

A conference speaker, Natalie has presented at GraphQL Summit in San Francisco and O'Reilly Fluent in San Jose. Before Slack, she worked as a full-stack engineer at Zillow Group, using React, TypeScript, Node, and GraphQL on AWS. She holds a B.S. in Computer Science from UC Davis.