What I Did Summer 2019

A What I Did is my intersection between what Julia Evans describes as a brag document and a Where I’m Going, applied to relatively short time frame.

This summer I worked with the Angular Team at Google in Sunnyvale, CA. I feel incredibly fortunate to have had such an experience, during which I

  • shipped an Angular indexer for all of Google’s internal codebase,
  • improved a TypeScript indexer, including adding plugin support,
  • added a semantic analysis API to the open-source Angular project.

I felt these were interesting things to work on, and the people around me were even more interesting. The company’s work environment was one of the first I’ve been able to be my whole self in. I have many other thoughts about the experience and have been thinking about how I can share and give this experience to othersThis will be a future cc post.. In the meantime, please email me if you’d like to chat!


1: Angular Indexer

I designed, developed, and shipped an indexer for Angular source code. This was a fantastic project with unexpected complexity throughout, even in its very early stages. The indexer used the Kythe framework, which has a sample UI demonstrating the kinds of cross-references a Kythe indexer can generate.

The project was initially scoped out to provide indexing information about interpolated properties and methods in templates. For example, given an Angular template

and component

the indexer was to generate cross-references and usage information about the class property myProperty.

I showed this was reliably practicable in the first half of my internship, then spent the next quarter of my internship adding support for the rest of the Angular template syntax and rolling out the indexer to production on all of Google’s internal codebaseBrowsed by more than 45K developers, and consisting of more than 26K Angular modules!. The last quarter of my internship I fixed bugs, hacked on some Rust stuff, and worked with customers of TypeScript indexer plugins.

I gave a talk on developing the Angular indexer:

2: Angular Indexing API

As part of my work on the Angular indexer, I needed to extract semantic information about an Angular project. To enable this, I created a new semantic analysis API called the Angular indexing API on the Angular compiler.

The indexing API is fairly small, TypeScript-compiler-esque, and is very easy to use:

There are now some thoughts of using this API for an open-source Angular indexer and of using it in the Angular language service.

Near the end of my internship, I gave a talk on what I learned contributing to a large open source project like Angular:

3: TypeScript Indexer

I added many new features to the open-source Kythe TypeScript indexer, including

  • new cross-reference features,
  • information about overridden methods on a class,
  • a schema for entries emitted by the indexer,
  • a plugin model for adding additional functionality to the indexer.
    • now used by three separate indexers

Like the Angular indexer, the TypeScript indexer runs on all of Google’s codebase, which consists of thousands of TypeScript projects and is browsed by more than 45K developers.

Collaboration ‘n’ Friends

My intern host was Keen Yee Liau, an incredible individual from whom I learned a tremendous amount (especially about philosophy and life). I consider us good friends now, and we will continue to keep collaborating.

I collaborated with Evan Martin, who built the Kythe TypeScript indexer and works on TypeScript at Google. I also worked extensively with Alex Rickabaugh, who is the code owner of the Angular compiler. I communicated quite often with the Kythe team and with two other individuals developing indexers with TypeScript indexer plugins.

The entirety of the Angular team was amazing. Each presented me with new ideas and helped create a diverse, accepting environment where I could literally let my hair down.

Finally, I lived in a “Hacker Home” with a healthy amount23? 24? It was a lot. of other individuals who offered me new perspectives and shared with me a joyful summer.

These names likely mean nothing to you, but the picture only missed Dino and Courtney :cry:

Mountain View Hacker Home, Summer 2019

What I learned

In no particular order,

  • New languages and technologies.
  • Programming language and compiler design.
    • Influenced by the TypeScript and Angular compilers.
    • Design a compiler to support semantic analysis from the start. This may seem cumbersome because the primary goal of a new compiler is to emit code quickly and correctly, not have support for language analysis features, but designing for language analysis features will decrease cost of work substantially down the line. Many compilers face the issue of high cost, including Angular’s and Rust’s.
  • Advanced and idiomatic TypeScript.
  • How to approach large codebases and open-source projects.
  • Meta stuff!

Where I’m going: Next Goals

My internship is over, but my work isn’t. In no particular order, my goals for the next semester are:

  • Continue contributing to Angular.
  • Continue contributing to Kythe.
    • There is work to be done with Code Search UI limitations.
    • The TypeScript indexer still has interesting places to grow in, including some refactorings of the codebase and supporting lower-priority cross-reference features.
  • Find ways to share and give my experience to others.
    • cc post coming soon.
  • Write and Talk.
    • Write a blog post about my experiences contributing to Angular, based off my presentation on the same topic.
    • Find an Angular conference to attend.
  • Take interesting classes.
    • In my (hopeful) lineup for the next two semesters are Distributed Systems, Algorithms, Compiler Design, Cryptography, Synthetic Chemistry, and Physical Chemistry.
  • Perform an analysis of how various student groups at my university operate.
    • cc post coming after project completion.
  • Be a good TA for CS3251.
  • (Hopefully) find a job for Summer 2020.


If you got this far, you probably want to talk. Cool, I do too! The best way to contact me is via email.