Type System and Tooling Engineer San Francisco

The Developer Productivity group is responsible for making Stripe’s developers happy and productive. We work on tools, processes, and code refactoring to accelerate Stripe engineering as Stripe scales.

We have built and rolled out the first version of a static type system for Ruby to improve our ability to maintain and extend Stripe’s large and growing codebase. We need to extend the type checker, incorporate types into more of our code base, and create more of the tooling that the type checker enables.

We’re looking for people with a strong background in and interest in building language processing tools such as type checkers, semantic analyzers, compilers, or IDEs. The ideal candidate will have a mix of technical expertise in language processing, a passion for solving developer experience problems, and a pragmatic ability to ship results iteratively.

You will:

  • Work with a team of technically sophisticated engineers who make developer experience their first priority.
  • Solve problems for fellow Stripe engineers by understanding their needs and coming up with both short term workarounds and long term solutions.
  • Use both qualitative and quantitative metrics to determine priorities and measure effectiveness.
  • Deliver practical, useful, and reliable tools, processes, and code refactorings to Stripe engineers.
  • Work with stakeholders across Stripe to balance and accommodate competing desires.

You may be a fit for this role if you:

  • Enjoy and have experience building language processing tools, especially those that consist of or leverage static type systems.
  • Are comfortable writing code in multiple languages. Our type checker is written in C++ but we also spend much of our time working in Ruby.
  • Are passionate about developer experience.
  • Are results driven and pragmatic.
  • Thrive in a collaborative and diverse environment involving different stakeholders and subject matter experts.

You might work on:

  • Extending the existing type system to address cases we haven’t handled yet.
  • Adding more typing to our Ruby code base manually or via tools.
  • Building large scale automated refactorings of our Ruby code base to enable better static typing.
  • Improving the usability and error reporting of our type checker.
  • Designing, building, and maintaining tools that a type system can help enable such as IDE integration, semantic code analysis, and semantic code search.

We look forward to hearing from you.

Apply now