I’m an iOS engineer with a passion for UX implementation and design, as well as interactive 2D/3D graphics. I’ve shipped 8 iOS apps in a lead role.
I love being inspired by talented designers, obsessively polishing UX details, engaging in iterative product design, and striving to meet the occasional crazy deadline.
Before transitioning to iOS, I worked at DreamWorks, developing in-house 3D animation desktop applications.
In 2013, I received a technical Academy Award for co‑developing the lighting application used by animators to create Shrek, Madagascar, and 30+ other films at DreamWorks.
I’ve worked at four startup companies, most recently Trash, an early stage ML-based video editing iOS app startup.
I inherited the Trash project shortly after the app launched in the App Store. As the emergency lead engineer replacement, I implemented new features on an aggressive schedule to move the product forward while fixing legacy bugs. Trash was acquired by VSCO in 2020.
Before Trash, I worked at Polyvore, which was acquired by Yahoo (now Verizon Media).
At Polyvore, I collaborated with a small, labs-style team to develop experimental iPhone apps in the categories of fashion, social networking, group video chat, and personal finance. Each app went from design to shipping product in two to three months, followed by several rounds of iteration driven by UXR and analytics.
At DreamWorks, I worked closely with animators while developing a suite of in-house 2D and 3D graphics applications used to create TV commercials, live-action film effects, and computer animated films. I created many app components as part of this work, including custom 2D UI controls, specialized 3D manipulators for lighting scenes, a sophisticated spreadsheet-like editor for large databases of lighting information, and a playback view for character animation.
In my spare time, I’ve developed several side projects to explore ideas that I’ve been interested in, with an emphasis on 2D and 3D graphics and interaction. A few notable ones are described here.
This iOS app explains the mathematical concept of a tesseract, which is the four‑dimensional analog of a cube.
The Fourth Dimension is a 30‑page interactive 3D book written in simple, everyday language to target a wide audience. Instead of static illustrations or videos, the user engages with a four‑dimensional geometric model.
This app has a 4.8 star average from 5,600 ratings worldwide. Apple has featured it in the App Store several times, and is especially popular in China. Despite the fact that The Fourth Dimension is an educational app about a single mathematical concept, I’ve sold 90,000 copies at $2.99.
The Fourth Dimension was written in Objective-C, using OpenGL and GLSL to render the interactive 3D scenes.
For this project, I devised an intuitive 4D direct manipulation mechanic by constructing a 4x4 four‑dimensional rotation matrix using the user's screen space drag vector as the first basis vector and the 4D W‑axis unit vector as the second basis vector for the matrix. The resulting user experience is much more intuitive than the traditional approach of providing a set of rotation sliders for each of the four axes.
As a long term project, I’m designing and prototyping an app to explain Einstein’s theory of special relativity, which describes the surprising, unintuitive ways in which time and distance behave for fast‑moving objects.
As a result of this work, I've developed the surprising ability to draw freehand 3D Minkowski spacetime diagrams.
For this project, I wrote a Swift framework that models a hierarchy of 3D inertial frames of reference in spacetime. I used SceneKit to render a relativistic scene graph from the point of view of an observer in an arbitrary inertial frame.
The following video shows an early prototype that I created using SceneKit to get a better firsthand understanding of the behavior of spacetime. The design of the actual app that will follow is quite different.
Note that in the second half of the video, the skew transforms, which are necessary to accurately model relativistic length contraction in 3D, are not directly supported by SceneKit. I was able to work around this limitation using singular value decomposition.
As with The Fourth Dimension, this app will be built around interactive 3D models, although this time, I intend to use ARKit to make the experience more visceral. The user will develop an intuitive feel for the way spacetime behaves by playing with it directly, instead of learning the equations that describe spacetime’s behavior and struggling to visualize them.
The purpose of this project is not just to explain what the effects of special relativity are, such as time dilation and length contraction, but to explain why these effects happen, in a deep, intuitive way that cannot be provided by a canned video or a list of equations. This is something that is missing from most traditional explanations of special relativity.
The fundamental design goal of this app is that I want the user to feel an overwhelming sense of enlightenment when they realize that they are able to fully grasp a hidden truth about the nature of reality.
I recently created Look at This, a small, single‑purpose app that streamlines visual communication between UX designers and engineers working remotely.
Look at This simplifies the process of marking up and combining small groups of screenshots to highlight a UX design issue and sharing them at 1x retina scale, which is often a more pleasant experience for users on the receiving end.
For this project, I implemented a replacement for UIToolbar that provides a more appropriate custom transition between sets of bar button items while maintaining the default iOS visual style.
Look at This also has the ability to composite together a small sequence of annotated screenshots into a larger image. While working remotely at Trash, this was something that I often found myself doing manually in Illustrator to help tell stories about product design issues.
Fiasco was a Scrabble/Tetris mashup for iPhone.
I collaborated with a UX designer friend on the game mechanics. She did the visual design and I did the coding.
I designed and implemented the animation, drawing from my experience working with animators at DreamWorks.
I made the flare effects appear whiter than white by dimming all of the other visual elements, as if the user's eyes were adapting to the intensity of the glowing elements.
Although Fiasco failed to gain traction in the App Store, we learned valuable lessons about product development.
For fun, I implemented an approach to global illumination called discontinuity meshing (PDF, 5 MB), which encodes shadow edges in a static mesh of polygons by introducing new vertices.
I implemented photon mapping (PDF, 1 MB) to calculate indirect lighting, which was encoded in the mesh as vertex colors.
A critical component of this work involved implementing Delaunay triangulation in terms of Jonathan Shewchuck’s robust computational geometry predicates, to avoid incorrect results due to floating point roundoff errors.
I wrote about 70,000 lines of C++ code for this project, 25% of which were unit tests.
Shortly before I started working at Trash, I wrote a Metal shader for an undulating chromatic liquid surface, inspired by the product’s visual design concept material.
This shader models a transparent refractive distorted cylindrical mesh of polygons, with the radius of each point on the cylinder determined by a half dozen sine waves passing through it at various angles in texture coordinate space.
Calculating the refraction vector for the environment map required taking partial derivatives of the equation representing the surface.
This open source Swift library simplifies the creation of a scrolling view controller filled with arbitrary content.
This library addresses a scenario that I encountered frequently at Polyvore. UX designers would often design static screens targeted at large device sizes, without fully considering how they would appear on smaller devices.
In Interface Builder, ScrollingContentViewController exposes a view controller outlet that specifies a content view that should be made scrollable. Everything else is taken care of automatically.
Although ScrollingContentViewController has a singular purpose, its creation required a deep exploration of the mechanics of keyboard presentation handling on iOS, which can be surprisingly involved. This library correctly handles many undocumented special cases, including device orientation changes, sequences of view controllers with shared keyboards under a navigation controller, and additional safe area insets.
To gain more experience with 3D modeling in Modo, I designed a set of legs for plants.
The legs include a solar panel, rechargable batteries, a laser range finder, and a soil moisture sensor to allow the host plant to play a more active role in acquiring water and sunlight.