1989 - 2019
Who is Chris Laﬀra?
Chris works at Uber Amsterdam, since Jan 2018.
Chris has worked in Tech at IBM Research, Morgan Stanley,
IBM Rational, Bank of America, and Google. At Uber, Chris
works on tools that increase Uber’s ability to roll out software
faster and more frequently.
Chris has spent the last 30 years of his life on a mission to
make other engineers more productive.
See chrislaffra.com for more details.
This is an overview of my career. Over the last 30 years,
I have spent most of my technical career towards
understanding, profiling, and visualizing complex systems.
“Related entities forming a unified whole”
First, what is a system?
“No centrally defined interactions”
“Consisting of many parts”
Second, what is complexity?
“Images, diagrams, or animations
communicating a message.”
“A picture is worth a thousand words”
Finally, what is visualization?
How I got started, by visualizing the execution of applications
written in PROCOL, my PhD thesis language.
Book #1 Book #2
heap of objects,
starting with the
shape of an object
See live calls to
The goal: Understand
what is happening and
My first job after my PhD. Developed a system for custom
visualizations for C++ and Smalltalk.
Original source code
As soon as Java came out, I wanted to learn more about it.
So, I ended up writing book the fourth book that was
published on Java while working at Morgan Stanley.
At IBM Research, I worked on Jax, which used JikesBT, that I developed, to analyze whole
program call graphs and optimize Java programs for size. For example, we reduced javac to
half its size. Aside from being smaller, the secondary benefit was that applets loaded faster. 1999
I wrote the first AdBlock, 8 years before the actual AdBlock was launched. I instrumented the
entire IE Java runtime, using JikesBT to do bytecode instrumentation, and added specific
hooks for networking, general profiling, and ability to stop/start/kill any applet remotely.
My IBM/OTI team in Amsterdam developed the first commercial IBM product
based on Eclipse, focusing on embedded Java. We constantly worried about size
and performance. The learnings from Jax were applied to make embedded Java
apps as small as possible. I also started looking into performance of larger Java
programs, such as Eclipse itself. To better understand how Eclipse works, I signed
up to co-author a book on Eclipse and wrote numerous profilers.
One experiment was a
heap-exploration tool, in
this case showing all the
objects in Eclipse
pointing to a given
A custom CPU
analysis tool I
XRay. The goal
was to show
patterns and for
Other tools, such as Eclipse Universe, offered novel structural communication patterns
between Eclipse plugins, allowing engineers to dive deeper into specific scenarios. It showed
domain-specific issues, in addition to resource management issues and challenges. 2004
Finally, working with IBM Research, I devised novel way to package up Eclipse applications
using streaming delivery, combined with introducing memory-mapped shared classes using the
J9 JXE format. This allowed us to save about ⅓ in startup time and memory used. 2005
WebSphere VMs per Node
At Bank of America, I was the first hire on the Quartz project. My interest on this
project was to increase other people’s understanding in how the platform was
structured and implemented. I developed a live-coding training system and
contributed to coding workflows, training, and general developer advocacy.
Bank of America
At BofA, I developed a
live coding system
similar to Jupyter
A novel invention I
added was the ability
to do time-travel
debugging of generic
Python code, but also
algorithms that were
I also wrote all the
Still at BofA, I
developed repository of
>50 Computer Science
This essentially was a
Hotwire for Python.
This was implemented
AppEngine and cool
The goal of Auger was to introspect a running system, record everything, and then produce
specific output that uses all the data being recorded. In this case I generate unit tests. But,
another application could be to automatically generate performance metrics, or derive types.
Pava takes Java
converts them to
Python source code.
Not sure how useful
Pava really is, but for
me, this was really an
effort to study the
bytecodes for Java
At Google, I worked a lot on Java and Android tools and apps. I also developed an
interest in making the life of engineers better by providing them with tools to
understand how they fit into their organisation and how they can profile their life.
People also represent
a complex system and
I played a lot with
of my personal and
work graph to discover
github: Ikke Graph.
While working at Uber, my MacBook was always struggling with the CPU usage of Intellij and
the Android Emulator. To understand better what was going on, I created HappyMac, which
allows its user to discover expensive processes and auto-suspend them using some rules. 2018
HappyWeb is like HappyMac, but focuses on slow network connections. 2018
program and saves
an event in a local
events can show
much time is spent
in certain activities,
and how to avoid
A human profiler?
Complex systems are all around us, either as technical solutions or as connections between humans. In
order to improve these complex systems, we need to understand them better. To understand them better,
we need to measure and generate metrics. Custom tools will then provide insights.