Industry Projects


Embedded Coder® generates readable, compact, and fast C and C++ code for embedded processors used in mass production. It extends MATLAB Coder™ and Simulink Coder™ with advanced optimizations for precise control of the generated functions, files, and data. (

I’ve been working with the Embedded Coder in Simulink for years, incorporating usability features and capabilities including the Embedded Coder Toolstrip and the Embedded Coder Dictionary. Embedded Coder requires me to present advanced software engineering concepts in a simple and usable way while still enabling them to gain the scalability and performance they need.

Techniques applied

  • Workflow analysis and diagramming
  • Contextual interviewing
  • Case study research
  • Modeling enterprise processes
  • Organization research
  • Iterative design sessions
  • Prototyping (using Axure RP)

MATLAB Coder™: Generate C/C++ code that can be used in embedded systems from MATLAB


MATLAB Coder™ generates C and C++ code from MATLAB® code for a variety of hardware platforms, from desktop systems to embedded hardware. It supports most of the MATLAB language and a wide range of toolboxes. (

MATLAB Coder users want their code to convert seamlessly from MATLAB to C and C++. I’ve worked on making the workflow simple and easy while also giving users transparency and flexibility into how their code works. I’ve worked on the MATLAB Coder Code Generation Report, on their automated fixed-point conversion tools, and on improvements to both GUI and command-line features.

Techniques Used

  • Workflow analysis and diagramming
  • Contextual interviewing
  • Lightweight journey mapping
  • Iterative design sessions
  • Braindrawing
  • Prototyping (using Axure RP and Figma)
  • One-Click Testing
  • Usability testing

User Experience Skills and Tools

Techniques I use for user research and design include:

  • Contextual interviewing
  • Questionnaires and surveys
  • Workflow analysis
  • Lightweight journey mapping
  • Case study research
  • Organizational structure and social network analysis
  • Design workshops

The tools for researching, understanding, and documenting user workflows and user-facing designs are Axure RP and Figma. I also enjoy using PowerPoint and pencil/paper.

Axure RP allows the user to test and demonstrate prototypes with a surprisingly high amount of interactivity, which helps development teams understand what designs look like and how they affect user workflows. I also perform user testing with lightweight Axure RP mockups.

Figma enables very rapid drawing of all kinds of applications through the use of layouts, components, and variants, which lets me rapidly iterate on ideas. I have used Figma for designing and evaluating projects for Embedded Coder and MATLAB Coder.

Research Projects


A screenshot of Gidget with labelled elements, including (1) the code window, (2) execution controls, (3) level goals (4) the world, (5) visualization of program state or assessment area, and (6) explanation of program executions
Gidget: An Educational Debugging Game

Gidget is a debugging game designed to be provided to teenagers. It is a game where you control a robot using an imperative programming language and help the robot rescue animals and clean up toxic waste. I have been helping Andy Ko and Michael Lee with development behind Gidget. Information has been posted at the University of Washington and some information in the game is available in academic publications.

Gidget and the Idea Garden

A four-panel storyboard that illustrates how a player interacts with the Idea Garden in Gidget. "for" loop code exists in the level. Player is curious about what the "for" loop is and moves cursor over the keyword. Tooltip appears that contains the reference guide content, along with the "call for help" button accompanied by the character portrait. Player clicks on "call for help". The content of the tooltip is appended with the Idea Garden suggestion.
Storyboard illustrating a player’s interaction with the Idea Garden hint system in Gidget

As part of our involvement in Gidget, we are implementing Idea Garden features into Gidget. The Idea Garden subscribes to a philosophy of “helping end users help themselves” by trying to help them overcome barriers by instilling them with curiosity and the desire to experiment rather than trying to help them overcome barriers by sweeping them under the rug.

The Idea Garden generally takes the form of tooltips that appear in the context of a person completing a task and provides encouragement, strategy information, and ways to learn. It differs from other intelligent tutoring systems in that the Idea Garden is meant not to be used only in the context of course exercises, but also in the context of someone doing a task without the explicit intention to learn.

Information Foraging in Software Engineering

We investigate how software developers build software using an HCI theory, Information Foraging Theory. The theory is a theory of human behaviour that describes how people forage for information. They are predicted to forage in a way to provide maximum benefit for minimum value and to make decisions based on input from the environment that affects this cost/benefit ratio. This theory is applicable to software engineering because software engineering is a very information-seeking intensive activity. People spend a lot of time looking for things—whether it’s “What does this variable do?” down to, “Where can I start investigating this problem?”

By using this lens, we can investigate how developers identify what information they seek to answer certain questions, how they seek this information, and how to arrange development environments to help developers find the information that they need when they need it.

Personal Programming Projects

The Painter’s Cat (Ludum Dare PageGithub)

The Painter's Cat Screenshot; a Mondrian-like image with a small pixel art cat on the bottom edge.
The Painter’s Cat Screenshot

A personal project. The Painter’s Cat is a 2D video game that I made in a real-time period of 48 hours. I’ve written about the experience herehere, and here.

You’re a cat in a dream, and you’re able to paint black, Mondrian lines against a backdrop of musical notes. Avoid the colored squares and try to “bound” the colors to score points.

This was my first experience using PyGame and the first time I’ve “finished” writing a game. As I did the entire game in a weekend, the source code is really dirty and the controls and difficulty are a little off.

Development Environment

I work primarily on Mac OS X using a combination of TextMate and the command line. However, after doing Ludum Dare 26 and coding a lot in a very short period of time, I’m becoming a little unhappy because it doesn’t have a lot of programming support for Python (no interactive syntax checking, no tooltips for APIs, indentation issues, no auto-reformatting, the Run Task box stays alive after I quit so I end up with a thousand Run Task windows, etc). I’m thinking of migrating to something else.

Programming Languages

I’ve learned a lot of programming languages, mostly in the imperative style. Here’s what I’ve been using recently.

  • Python
  • Javascript, though I’m still not entirely comfortable with it yet. I could use with looking at a lot more examples of clean Javascript code.
  • R (a Matlab-like environment for statistics)
  • Ruby

I probably enjoy using Ruby the most out of these languages, but I tend to use Python a lot because its third-party module support is a little more mature.

Music Projects

CD Front Cover of Hurry! A Final Fantasy X Remix Album
CD Front Cover of Hurry! A Final Fantasy X Remix Album

This album came into existence after a YouTube comment alleged that a particular song from the video game Final Fantasy X was so amazing that no one ever remixed it. I co-directed a fan remix album with The Author and coordinated the efforts 9 musicians, an artist, and a webmaster to release Hurry! A Final Fantasy X Impossible Remix AlbumThe music’s available for free and a number of its tracks were featured on the front page of Overclocked ReMix, a video game arrangement site that is known for its exceedingly high quality music and talented musicians.


Leave a Reply

Please log in using one of these methods to post your comment: Logo

You are commenting using your account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s