-
Notifications
You must be signed in to change notification settings - Fork 3
/
resume.tex
145 lines (117 loc) · 8.11 KB
/
resume.tex
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
%% ------------------------------------------------------------------------
%% Copyright 2023 Eric Fritz ([email protected]).
%% ------------------------------------------------------------------------
\documentclass[]{clean-resume}
\begin{document}
\newcommand{\address}{2408 N. 89th St. Wauwatosa, WI 53226}
\newcommand{\phone}{(608) 774-1120}
\newcommand{\email}{\href{mailto:[email protected]?subject=Resume}{[email protected]}}
\newcommand{\website}{\href{https://eric-fritz.com}{eric-fritz.com}}
\newcommand{\resumelink}{\href{https://eric-fritz.com/resume/}{eric-fritz.com/resume}}
\newcommand{\articeslink}{\href{https://eric-fritz.com/articles}{eric-fritz.com/articles}}
\newcommand{\paperslink}{\href{https://eric-fritz.com/papers}{eric-fritz.com/papers}}
\header{eric fritz}{I build software}{\phone $~\cdot~$ \email $~\cdot~$ additional resume details at \underline{\website}}
Staff software engineer with over 8 years of professional experience and over 10 years of experience researching and creating developer tools. Focusing on compounding the ability of fellow engineers.
\section{core competencies}
{
Go $\cdot$ TypeScript $\cdot$
Postgres $\cdot$ React $\cdot$
Observability $\cdot$ Performance optimization (Algorithms, Databases)
\\
Containerization and Infrastructure (Docker, K8s+Operators, Firecracker, AWS, GCP, IaC) \\
Technical writing $\cdot$
Improving org-wide standards and developer experience
}
\section{work history}
\detailentry
{Render}
{Software Engineer, Datastores Team}
{2023 - Now}
{Go, Kubernetes, Postgres}
{
At Render, we are building a powerful, easy-to-use cloud platform to host anything online, from simple static sites to complex applications with dozens of microservices. The Datastores team delivers managed Postgres and Redis databases, ensuring secure, reliable, and high-performance data solutions for our rapidly scaling platform. My contributions include:
\textit{Performance \& Scalability}
\begin{addmargin}[1em]{0em}
\phantom{~~}\hspace{-1em}$\cdot$ Introduced dynamic Postgres configuration per database instance, optimizing CPU and memory usage based on available resources, enabling users to more fully utilize their database. \\
\phantom{~~}\hspace{-1em}$\cdot$ Developed more efficient techniques for reindexing Postgres databases. Reindexing is a necessary step to prevent data loss when changing the base OS, which has occurred both when migrating instances from another Cloud provider, and interally within Render's infra. This both improved reindexing speed, reducing total amount of work and parallelizing the remaining work, as well as the amount of additional disk space required during the reindexing operation.
\end{addmargin}
\textit{Quality Assurance \& Reliability}
\begin{addmargin}[1em]{0em}
\phantom{~~}\hspace{-1em}$\cdot$ Designed and implemented the initial version of \textbf{Pulsegres}, a continuous testing framework that maintains large-scale Postgres instances and detects behavior-altering code changes that are not caught with fresh, small end-to-end testing instances.
\end{addmargin}
\textit{Cost Optimization}
\begin{addmargin}[1em]{0em}
\phantom{~~}\hspace{-1em}$\cdot$ Automated periodic cleanup of unnecessary backup data, saving \$300k in storage in 2024. \\
\phantom{~~}\hspace{-1em}$\cdot$ Relocated backup storage to the same region as the instance, reducing network costs by \$15k/mo.
\end{addmargin}
\textit{Automation \& Tooling}
\begin{addmargin}[1em]{0em}
\phantom{~~}\hspace{-1em}$\cdot$ Created a system that automatically resolves alerts from our observability stack, reducing manual interventions by handling common issues like disk overuse and replication hiccups automatically. This leverages dynamic Postgres configuration where possible. \\
\phantom{~~}\hspace{-1em}$\cdot$ Automated the migration of databases from Heroku to Render such that application downtime is minimized and cross-Cloud locale issues are handled without user intervention. This automation was used for several high-ARR customers, and the process is repeatable for many more. \\
\phantom{~~}\hspace{-1em}$\cdot$ Discovered a misuse of our ORM that was returning unintended records and repaired over 60 occurrences of this misuse. Developed a custom linter that analyzes our use of the ORM to prevent the misuse in the future.
\end{addmargin}
\textit{Developer Relations}
\begin{addmargin}[1em]{0em}
\phantom{~~}\hspace{-1em}$\cdot$ Authored a series of blog posts to educate users on effective Postgres usage, covering topics like query optimization, indexing strategies, and advanced SQL features.
\end{addmargin}
\textit{Platform Features}
\begin{addmargin}[1em]{0em}
\phantom{~~}\hspace{-1em}$\cdot$ Led collaboration with product and design to develop \textbf{Service links} enabling seamless, first-class connection between compute and database resources on the Render platform.
\end{addmargin}
}
\pagebreak
\detailentry
{Sourcegraph}
{Staff Software Engineer, Language Platform Team Lead}
{2019 - 2023}
{Go, TypeScript, Postgres, LLMs}
{
Sourcegraph is a fast-growing developer tools company with a mixture of on-prem and SaaS clients for some of the largest technology companies in the world. My contributions include: \\\\
\phantom{~~}\hspace{-1em}$\cdot$ Designed and implemented the Precise Code Intelligence Platform that produces and persists source code analyses to power features such as cross-repository/global code navigation. More recently, we've integrated this data lake into our AI Coding assistant, Cody, to provide additional context when answering questions about a code base. \\\\
\phantom{~~}\hspace{-1em}$\cdot$ Scaled and optimized our data layer as the resident Postgres expert. Our primary SaaS database stores 15TB of fresh analysis data at any given point in time, and required the development of new bulk write techniques and novel relational schemas. \\\\
\phantom{~~}\hspace{-1em}$\cdot$ Provided mentorship, project management, and technical guidance for half a dozen engineers as an "Uber Tech Lead". Ownership of infrastructure projects originally written within the Language Platform Team have transitioned to dedicated teams, including executors (which can safely invoke untrusted code to produce code analysis results), as well as our database schema migration, schema drift detection, and instance upgrade infrastructure (self-serve upgrades prior to this work would more often than not fail and corrupt data).
}
\detailentry
{Mitel}
{Senior Software Engineer, Labs Team}
{2015 - 2019}
{Go, Python, Distributed systems}
{
I was the primary designer of \emph{Nighthawk}, an IFTTT-like engine and the surrounding ecosystem to support integration of internal and external services, and \emph{Kestrel}, Mitel's IoT infrastructure and collaboration strategy. Before that, I worked on \emph{Summit}, a CPaaS system that allows users to build voice and SMS applications with Lua code that runs in a containerized sandbox.
}
\section{education}
\detailentry
{Ph.D. Engineering, Computer Science}
{University of Wisconsin - Milwaukee}
{2018}
{Milwaukee, WI}
{
\emph{`Waddle - Always-Canonical Intermediate Representation'}: an optimizing compiler and a supporting set of algorithms whose internal representation never \emph{goes stale}. Local updates to internal structures reduces compilation time while yielding the same output.
}
\section{publications}
\muted{Author's versions and articles deep-diving into my current work can be found on my website.}
\lineentry
{Waddle - Always-Canonical Intermediate Representation}
{Ph.D. Dissertation}
{2018}
\lineentry
{Maintaining Canonical Form After Edge Deletion}
{ICOOOLPS}
{2018}
\lineentry
{Charon: The Design of a Limiting Microservice}
{Whitepaper, Mitel}
{2017}
\lineentry
{Typing and Semantics of Asynchronous Arrows in JavaScript}
{The Science of Computer Programming}
{2017}
\lineentry
{Arrows in Commercial Web Applications}
{HotWeb}
{2016}
\lineentry
{Type Inference of Asynchronous Arrows in JavaScript}
{REBLS}
{2015}
\end{document}