-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.html
371 lines (367 loc) · 15.4 KB
/
index.html
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
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
<!DOCTYPE html>
<html class="no-js" lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title></title>
<link rel="stylesheet" href="css/style.css" />
<meta name="description" content="" />
<meta property="og:title" content="" />
<meta property="og:type" content="" />
<meta property="og:url" content="" />
<meta property="og:image" content="" />
<meta property="og:image:alt" content="" />
<link rel="icon" href="/favicon.ico" sizes="any" />
<link rel="manifest" href="site.webmanifest" />
<meta name="theme-color" content="#fafafa" />
<script>
(function (i, s, o, g, r, a, m) {
i["GoogleAnalyticsObject"] = r;
(i[r] =
i[r] ||
function () {
(i[r].q = i[r].q || []).push(arguments);
}),
(i[r].l = 1 * new Date());
(a = s.createElement(o)), (m = s.getElementsByTagName(o)[0]);
a.async = 1;
a.src = g;
m.parentNode.insertBefore(a, m);
})(
window,
document,
"script",
"//www.google-analytics.com/analytics.js",
"ga"
);
ga("create", "UA-42818501-1", "isaacwhite.com");
ga("send", "pageview");
</script>
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link
href="https://fonts.googleapis.com/css2?family=IBM+Plex+Serif:ital@0;1&family=Source+Sans+3:ital,wght@0,500;1,500&display=swap"
rel="stylesheet"
/>
</head>
<body>
<div class="intro">
<div class="nameplate">
<h1>Isaac White</h1>
<h2>
Staff Engineer, Interactive News<br />
at The New York Times
</h2>
</div>
<p>
In ten years of building frontend and backend systems, I have had the
privilege of growing from a junior engineer primarily excited to author
code into a Staff engineer interested in broader organizational impact
through leadership opportunities and strategic engineering investment.
</p>
</div>
<ul class="social-menu">
<li>
<a class="email" href="mailto:[email protected]" target="_blank"
><i class="fa-solid fa-envelope"></i><span>email</span></a
>
</li>
<li>
<a
class="linkedin"
href="https://https://www.linkedin.com/in/isaacwhite/"
target="_blank"
><i class="fa-brands fa-linkedin"></i><span>linkedin</span></a
>
</li>
<li>
<a class="github" href="https://github.com/isaacwhite" target="_blank"
><i class="fa-brands fa-github"></i><span>github</span></a
>
</li>
</ul>
<p>
My experience at the New York Times has afforded me the opportunity to be
involved with and lead a wide variety projects across a number of tech
stacks. Here are a few of my favorites:
</p>
<ul class="portfolio-menu">
<li>
<section>
<h3>Tech lead: Skyscraper</h3>
<h4 class="years">2023 - present</h4>
<p>
Skyscraper is a set of utilities and orchestration service that
enables developers in the NYT newsroom to quickly author and
schedule scrapers for a variety of reporting use cases. It replaces
and consolidates 3 prior scraping tools and provides a common and
flexible foundation for offering everything from one-off scrapers to
complex scraper pipelines used for NYT live-coverage.
</p>
<footer>
Technologies used: Typescript, React, GCP Cloud Run, Datadog,
Terraform, Express, Postgres
</footer>
</section>
</li>
<li>
<section>
<h3>Tech lead: 2022 Election Admin and Publisher</h3>
<h4 class="years">2022</h4>
<p>
As tech lead for two of four systems powering 2022 election
coverage, I led initial development among 8 engineers in two teams
to adapt prior 2020 election learnings in support of configuring and
publishing thousands of election pages throughout the 2022 primaries
and general election. Both systems were built to be more observable,
testable, and adaptable than prior approaches, and a distributed
ownership model helped facilitate smoother transitions to new tech
leads throughout the cycle. In addition to the Publisher also
supporting Olympics coverage, both systems continue to support 2024
election coverage and were transitioned to new application owners.
</p>
<footer>
Technologies used: Typescript, React, GCP Cloud Run, Datadog,
Terraform, Express, Postgres
</footer>
</section>
</li>
<li>
<section>
<h3>Chairperson: Architecture Review Board</h3>
<h4 class="years">2021</h4>
<p>
<a
href="https://stackshare.io/posts/evolution-of-new-york-times-tech-stack#making-tech-decisions-nyt"
target="_blank"
>Architecture Review Board (ARB)</a
>
is a group of engineers responsible for facilitating and reviewing
RFCs written by software engineering teams across NYT. As
chairperson, I led a group of 16 engineers to refine and execute
processes that made the group's work more sustainable.
</p>
<footer>
Skills used: Facilitation, RFC writing, Process design, Team
leadership
</footer>
</section>
</li>
<li>
<section>
<h3>Tech lead: 2020 NYT Elections</h3>
<h4 class="years">2019 - 2021</h4>
<p>
As co-tech lead for
<a
href="https://www.nytimes.com/interactive/2020/11/03/us/elections/results-president.html"
target="_blank"
>the 2020 elections platform</a
>, I led a group of 40+ editors and engineers to contribute to a
platform that analyzed and covered all federal elections in the
United States across hundreds of live updating pages. As part of
this work, I also spearheaded the effort to enable publishing
election coverage (900+ pages on general election night)
simultaneously through core NYT publishing systems for the first
time, which became crucial to publishing the Pulitzer Prize winning
<a
href="https://www.nytimes.com/interactive/2021/us/miami-dade-florida-covid-cases.html"
target="_blank"
>county-level</a
>
<a
href="https://www.nytimes.com/interactive/2021/us/covid-cases.html"
target="_blank"
>COVID case count maps</a
>. <br /><br />
The 2020 app served as a bridge between prior monolithic
architecture that required closely monitoring application logs and a
new service mesh approach that could be run locally in a few
processes as well as deployed to GKE. We developed this platform
iteratively, starting with a core group of contributors and
adjusting the contributor pool as coverage needs expanded. The 2020
feature set continued to be used in 2021 with a smaller staffing
footprint, where the major use case was the ranked-choice NYC
mayoral election.
</p>
<footer>
Technologies used: Fastly, Node.js, GCS, Datadog, S3, Kubernetes,
Express, Redis
</footer>
</section>
</li>
<li>
<section>
<h3>Facilitator: Zelus</h3>
<h4 class="years">2020</h4>
<p>
Tasked with improving mobile-app developer previews for engineers
and editors in the NYT newsroom, I led a cross functional team of
engineers, product managers, and team leads to build consensus
around a solution that took advantage of existing CI processes and
created more flexible QA and debugging workflows for breaking news
coverage.
</p>
<footer>
Skills used: Facilitation, Vision painting, Consensus building
</footer>
</section>
</li>
<li>
<section>
<h3>Facilitator: Dolos</h3>
<h4 class="years">2021</h4>
<p>
As maintainer of an existing package for rendering develop web
previews, I was tasked with delivering a new approach that would
improve reliability and reduce maintenance costs. Working with
another engineer, we arrived at a new integration that built upon
prior work to pass in-progress stories through internally deployed
NYT core services. This new approach automatically stays up-to-date
with changes to NYT's story and home pages, while reducing the
number of failure modes and improving observability of how the
platform is being used.
</p>
<footer>
Skills/Technologies used: Scala, GCS, Protobuf, Golang,
Facilitation, Consensus building, Vision painting
</footer>
</section>
</li>
<li>
<section>
<h3>Tech lead: NYT Library</h3>
<h4 class="years">2017 - 2019</h4>
<p>
<a href="https://github.com/nytimes/library" target="_blank"
>Library</a
>
is a wiki powered by Google Docs. By placing documents within a
<a href="https://nyt-library-demo.herokuapp.com/" target="_blank"
>Google Shared Drive or Folder</a
>
and sharing it with a GCP service account, even contributors with
limited engineering experience can deploy a custom, accessible wiki
to Heroku or App Engine. It was my privilege to serve as lead
developer of Library when it was first built in 2017, and again when
we released the backend code for it in 2019. Today it continues to
host internal NYT documentation and is used by
<a
href="https://github.com/nytimes/library?tab=readme-ov-file#community"
target="_blank"
>many other major news organizations</a
>
and nonprofits.
</p>
<footer>
Technologies used: Google Drive API, Heroku, App Engine, Express,
Redis, Node.js, Kubernetes
</footer>
</section>
</li>
<li>
<section>
<h3>Tech lead: NYT Messenger</h3>
<h4 class="years">2018</h4>
<p>
NYT Messenger was a
<a
href="https://www.nytimes.com/interactive/2018/01/26/sports/olympics/olympics-messages-ul.html"
target="_blank"
>scalable</a
>,
<a
href="https://www.nytimes.com/interactive/2018/09/28/us/politics/the-campaign-reporter-ul.html"
target="_blank"
>reusable</a
>
system for
<a
href="https://www.nytimes.com/interactive/2018/06/11/sports/worldcup/world-cup-messenger-ul.html"
target="_blank"
>reporters</a
>
to engage readers with broadcast push notifications and 1-1
followups. I led a team of 3 engineers to build the initial
implementation for the 2018 Winter Olympics in Pyeongchang, South
Korea. NYT Messenger covered topics ranging from sports to politics,
and served as the experimental foundation for NYT's most successful
opt-in push channel to date, during the 2018 midterm elections.
Although it was sunset in 2019, the core technologies explored
continue to be used by ongoing newsroom push experiments.
</p>
<footer>
Technologies used: Google Cloud Firestore, React, Redux, GCS,
Localytics, Firebase, Express, Node.js
</footer>
</section>
</li>
<li>
<section>
<h3>Contributor: Chatblog</h3>
<h4 class="years">2016 - 2017</h4>
<p>
Chatblog was a foundational tool for NYT's evolving live coverage
approach for
<a
href="https://www.nytimes.com/interactive/2016/11/08/us/elections/trump-clinton-election-night-live.html"
target="_blank"
>breaking news</a
>
and
<a
href="https://www.nytimes.com/interactive/2016/12/12/insider/talk-to-the-times-holiday-food.html"
target="_blank"
>reader engagement</a
>. It succeeded a prior tool developed by Interactive News that had
grown difficult to support and debug on deadline. I co-architected
Chatblog in 2016 as part of a team of 3 engineers, with a specific
focus on the Node.js Slack daemon which was responsible for relaying
reporter commentary from an internal Slack channel into a Ruby on
Rails admin which was used by editors to curate and publish messages
throughout live coverage events. After the 2020 general election,
Chatblog was transitioned to the new NYT Live group, where its
editorial workflows became the foundation for NYT's current live
blog platform.
</p>
<footer>
Technologies used: Node.js, Ruby on Rails, MySQL, CircleCI, Slack,
React, S3, Websockets
</footer>
</section>
</li>
<li>
<section>
<h3>Tech lead: NYT responsive homepage prototype</h3>
<h4 class="years">2015 - 2016</h4>
<p>
In 2015, I joined a small team of designers, product managers, and
engineers to build a proof-of-concept for a future responsive
homepage for nytimes.com. The prototype had to demonstrate that it
was feasible to use the mobile ranking for NYT's homepage to produce
desktop layouts that conveyed sufficient editorial hierarchy to
readers without requiring dedicated copyfitting and previewing.
Although the effort started as simply a 6 week proof of concept, the
prototype was so compelling that the effort was extended to a 9
month effort which culminated in an A/B test to 1% of nytimes.com
readers for several months. This project was the first time I
experimented with snapshotting and recalling API state as a design
and development tool, which became transformational for future NYT
Elections feature development and debugging. The editorial and
design thinking for this project established the outlines of the
workflows of the NYT homepage used today.
</p>
<footer>
Technologies used: Node.js, Express, EC2, Varnish, Grunt, Mocha,
Webpack, Handlebars
</footer>
</section>
</li>
</ul>
<script
src="https://kit.fontawesome.com/495c4988c4.js"
crossorigin="anonymous"
></script>
<script src="js/app.js"></script>
</body>
</html>