this blog is deprecated

I am unifying all my content over on my main website now.

All existing posts and new posts will be at

This blog won’t be updated anymore, and will be gracefully sunset at some point in 2020.

Thanks for reading!

Read More

I drew all* 84 people I work with as Golang gophers. Here's what I learned.

Recently, I embarked on a fun, but ambitious and masochistic endeavor of trying to draw each of the 84* people I work with at Pivotal R&D in the Toronto office as a Golang gopher. Was it a super fun way to get to know my coworkers? Absolutely! Would I do it again? Probably not.

*I started this project in February, and completed it this past week. In that time, people have left and joined. I included some folks who have since left, and did not include folks who just joined. I might do a follow-up batch later on, when I’m less burned out!!

What’s the Golang Gopher?

The Gopher is the official mascot for the Go language. Here’s a blog post about its origins! Renee French designed...

Read More

Designing Self-Regulating Processes

I am currently reading The Manager’s Path, an excellent book by Camille Fournier that I highly recommend to anyone who’s not only considering becoming an engineering manager or tech lead, but also for anyone who wants to understand how to be more effective as an individual contributor. One thing that jumped out at me was this paragraph:

As a new tech lead, be careful of relying on process to solve problems that are a result of communication or leadership gaps on your team. Sometimes a change in process is helpful, but it’s rarely a silver bullet, and no two great teams ever look exactly alike in process, tools, or work style. My other piece of advice is to look for self-regulating processes.

“Chapter 3. Tech Lead”, from...

Read More

Learning to deal with grief as an adult

Update On January 15, my grandmother passed away peacefully in our family home in Xiamen, China. She was surrounded by her husband, her younger sister, her son and daughter, and grandson. While she was still lucid, in early December I was able to fly out to China and see her for a final time. Thank you to everyone who reached out to me after I published this post. The outpouring of support meant so much to me and my family – thank you.

I’m in a remarkably fortunate minority of people who have never had to deal with the loss of a close family member. I still have both parents, all my uncles and aunts and cousins, and all four grandparents. Plus, my mother remarried during my sophomore year of...

Read More

Creating, writing & delivering awesome technical talks

After DevOpsDays London, a bunch of people approached me, IRL and on Twitter, to ask for tips for delivering technical talks. I made a Twitter thread after my keynote at Write/Speak/Code:

I’m not an expert at giving technical talks by any means – but I do know a thing or two about public speaking, thanks to over ten years of public speaking training throughout middle school, high school, university and graduate school. This blog post is my attempt to externalise my process for brainstorming,...

Read More

How do I draw sketchnotes and doodles?

Lately I’ve been churning out a lot of sketchnotes:

How to level up your TDD skills?

I get asked pretty often by people who are interested in applying for a role at Pivotal, or a number of other companies known to value test-first development, “I know about this TDD thing, but how do I know that I’m doing it right?”

Of course my first piece of advice is to try to work at a company that values TDD, but that’s a chicken-and-egg problem if those companies are testing for TDD in the interview process!

This article is an attempt to summarise and categorise the advice that I generally offer to junior developers. All code examples in Ruby using RSpec syntax.

Be like Gandhi

I like to tell people, “Write the code you want to see in the world.” Like Gandhi! If he wrote code.


Read More

The Ulysses Paradox

I wrote this piece last year when I randomly learnt about the landmark case, United States v. One Book Called Ulysses. It was such a bizarre story that I was inspired enough to blog about it with my pseudo-art-historian hat on.

In 1922, in the temporal heart of Prohibition-era America, a man named James Joyce wrote what would be later considered the most controversial novel of the twentieth century. Ulysses chronicled the stream of consciousness of a character named Leopold Bloom, who lived in Joyce’s contemporary Dublin. The text was simultaneously esoteric and coarse, and whatever semblance of a plot punishingly difficult to follow due partly to changing, unreliable narration.

A literary magazine called The Little Review published chapters of the novel in serial form. This was common for the...

Read More

An Experiment to Improve Team-wide Feedback

I’ve been working at Pivotal Cloud Foundry for the last 16 months. During that time, I’ve mostly been an engineer, but am currently putting on a Product Management hat for a little while! More on that in a future blog post.

Pivotal is a company that spends a lot of time thinking about what good feedback looks like. Not as in feedback from customers or end users, although that is also extremely important; I’m talking specifically about peer-to-peer feedback that is intended to help individual contributors grow as engineers, designers, product managers, technical writers, and so on.

We have lots of rituals and tools for keeping feedback at the forefront of our regular work cadence – way more than I’ve seen elsewhere so far. For example, during the first week...

Read More

Learning COBOL in 2018

This past weekend, I finally ventured out of my burnout-induced cave to attend a tech event on a weekend: PLIBMTTBHGATY, one of my favorite formats for events where you learn stuff. The Programming Language I’ve Been Meaning To Try that I chose was COBOL. Surprisingly, no one else (except Spike) wanted to learn COBOL with me?!?

My main takeaway from the day is that COBOL was a lot easier to get started with than I anticipated. The syntax was obviously unlike any modern programming language I’ve used, but it was easy to read, because it was so imperative and there was no magic going on. After all, COBOL was one of the first languages designed for human readability.

Learning COBOL will probably be easier for folks who have some...

Read More

Craftmanship, Inclusivity, and Community-Building

A lot of things have been on my mind lately. Among them, Sarah Mei’s latest thoughts on Twitter about “No True Developer” tribalism. She and a few others call out this troubling pattern that has been happening in tech for a really long time, where people who are part of an “in” group publicly make assertions like “You’re not a true developer if you don’t do/know/follow X”. As someone who is relatively new to the industry (I started learning to code in September 2014, and have been working professionally since February 2015), I can relate to so much of this. I can’t recall how many times I’ve been in talks nights, hands-on events, or even just casual conversations at a pub, where a variation on this exchange has happened:

Read More

The Sophomore Slump

When I was in college, I spent most of my weekends traveling to other universities in order to take part in parliamentary debate tournaments. Students across all years participated in the same rounds, which made debate the single most exhilarating and intellectually-challenging activity of my college career – and also, the most emotionally difficult one.

Since freshmen are debating against seasoned seniors, the league had a special category of recognition for first-year debaters that fared well. Debaters in their first year are referred to as “novices”, and there was a corresponding set of novice speaker awards as well as team awards. Teams that were composed of two novices that had the best win-loss records would proceed to a special set of novice-only elimination rounds, or “outrounds”. When you completed your...

Read More

You've got passion -- how do you convince others?

If you’ve ever had a conversation about tech, software, hiring, retention, diversity, being a junior, supporting juniors, etc. etc. there’s a 95% chance that I’ve told you to go on Twitter and follow Sarah Mei immediately. Hey, you! Reader! Go follow Sarah Mei on Twitter immediately!

The reason is because she has some of the most accurate and concrete ideas for how to make life better for junior developers, particularly women and people who aren’t traditionally encouraged to enter tech. Through Sarah, I recently came across Lydia Guarino’s latest series of tweets about where junior devs fit.

It’s geared toward bootcamp grads, but most of the advice in there is generally applicable to anyone who is searching for their first job. This, in particular:

Passion and...

Read More

A Very Simple Thing You Can Start Doing

My last blog post and the reception to it got me thinking that it’s one thing to describe a problem in the abstract, but it’s much harder to come up with “actionable” solutions (good god I hate that phrase). But I think I have one idea that you can start doing today that will support the women that you work with.

I first noticed my friend Franzi doing this at a conference a few months back. It was so simple that it was mind-boggling to realise that I had never heard anybody else do this before.

Every time a woman is in the middle of a sentence and is interrupted by a man, Franzi gently interjected and said “Excuse me, Camilla was speaking,” or “John, please let Denise finish”....

Read More

I don't want to be That Girl

This is a difficult post for me to write. When I started coding a year and a half ago, I have to admit that I didn’t really know what I was getting myself into. I knew that software development was a cognitively intensive field, which is what initially drew me to it, but I didn’t know that it would be the community that would make me grow to have a truly vested, emotional interest in increasing diversity in this field.

I’ve been involved with organising codebar for the last year or so. At first, I think I became involved with codebar because I was feeling bored and untethered, just starting out in an entirely new career field. I’m someone who draws energy from being involved in thirty different things...

Read More

Full Text Searching in MongoDB

I’ve always had an interest in language. Specifically, I really like the sweet spot where natural language intersects with mathematical logic. I studied Ancient Greek in university for two years, but had to eventually stop because I realized that maaaaaybe I needed to actually take some Economics requirements and graduate… but during the two blissful years that I was studiously parsing and translating Homer, my fondest recollection is the (relative) regularity of Ancient Greek syntax. I liked that you could pretty much identify the role of every single word in a sentence based on its declension, which allowed the author complete freedom over the order in which the words were arranged. This, to me, felt like a very purpose-driven yet flexible language design.

Recently at work, a few teams have...

Read More

The Great TSL Bug-Hunting Competition

A few months ago, my company upgraded our core application from Rails 3 to Rails

  1. Despite the best efforts of the Rails maintainers in making the transition as smooth as possible, we still anticipated many subtle bugs and breakages.

Our application has a lot of moving parts, as is the case with most companies that have a core application. Moreover, every developer was familiar with a few key parts of the code, but nobody knew 100%. As a result, we were wary of the abilities of the dev team alone to think of every edge case that could potentially break the application logic.

The solution that we ultimately came up with led to one of the most fun, productive afternoons during my time at TSL: We held a...

Read More

My work visa experience

I’m often approached by fellow Americans or folks who live in non-EU/EEA, non-Commonwealth countries wondering how to go about getting a work visa in the UK. Here’s an account about the lessons I learned during my journey towards gaining a Tier 2 work visa to live and work in the UK.

In case it isn’t apparent, I work as a software developer. Specifically, I make web applications, primarily with Ruby on Rails. In my limited anecdotal experience, it is far easier to earn private sponsorship if you are looking for work in a STEM field, because specialized skills are in demand.

I completed Makers Academy on December 5, 2014 after three months of intensive, full-time studying. Immediately after the course, I spent 4 weeks cleaning up my Github (it...

Read More

Custom Rails Form Errors Without Gems

Everyone who’s used Rails knows that a lot of magic is baked into the framework. One part of Rails that I’ve always been a little mystified with is how form validations work under the hood. Lately, I’ve had to do a lot of hacking around with forms – sometimes to change error messages across the entire application, other times only for one particular use-case or one model. There are a couple of gems that make form customization a little bit more user-friendly – simple_form is perhaps the most well-known.

However, under certain circumstances (like legacy projects), it may not always be possible to install new gems due to dependency constraints. In this post, I’ll cover a few ways to customize form errors with native configurations. I’m assuming you’re using...

Read More

Ready, Set, Ruby!

A few weekends ago, Spike went to SoCraTes, where he learned a game called Set. The premise of the game is fairly simple:

There are a certain number of cards laid out on the table from a deck of 81 total cards. Each card has four characteristics, and three possible options for each characteristic:

  • Color - red, green, purple
  • Shape - diamond, pill, squiggle
  • Fill - solid, stripe, empty
  • Number - one, two, three

A complete ‘set’ consists of three cards that all have nothing in common, or all have exactly one trait in common. If two cards share a trait but not the third, it is not a set.

From the Warwick Maths Society

We got into a...

Read More

Being Wrong, Loudly

The journey of learning to code, for me, has borne a lot of similarities to learning the mechanics of university-level competitive debating. I’ve been wanting to write about these similarities for a while now, but struggled to find a unified, thematic way to present this intersection.

A bit of background: I debated competitively for about four years throughout university and graduate school. I never got very good at it. I never won speaker awards (recognition for the highest-scoring individuals at a competition), never won national titles, and produced a handful of good cases (topics briefs that establish the subject and boundaries of a round) but never anything spectacular. I experienced a lot of frustration very early on in my debating career, because I could not feel my own skills improving,...

Read More

On Code Citizenship

Before I knew I wanted to become a coder, I thought I wanted to become a lawyer, or at the very least, a policy researcher. And before that, I spent far too many waking hours living a double life as a competitive debater. As a result, I spent a lot of time reading political science and sociology texts in university and grad school. I’ve been thinking a lot lately about the idea of what it means to be a good citizen, and how that applies to software development.

Katrina Owen spoke at Bath Ruby a few weeks ago about the challenges of working on legacy code. The second half of her talk, which was probably the twenty minutes of the entire conference that resonated the most with me, offered...

Read More

Test-Driven Development - What and why?

In the process of describing my career change to non-developer friends, I found myself explaining time and again what exactly I learned at Makers Academy, and how it was possible to make a complete career transition in only twelve weeks. In truth, it’s impossible for a 12-week course to replace a 4-year university degree. However, at the same time it is also true that in most CS programs, much of the content is theoretical, and relatively little time is dedicated to learning how to write code – and even less is spent on learning how to implement industry best practices. Coding bootcamps are not intended to replace 4-year degrees – rather, they address a gap in the market for junior developers who are ready to write code and start adding...

Read More

Test-Driving Rock, Paper, Scissors with PHPUnit

Test-driven development is a method of writing as little code as possible in order to achieve functionality. In order to ensure that tests are purposeful (i.e. not false positives), it is standard practice at Makers Academy to write a failing test, then write just enough code to make the test pass, followed by refactoring. The aim of this tutorial is to provide a glimpse into the “Makers Way” of software development using PHP and PHPUnit. This walkthrough assumes basic familiarity with PHP syntax.

There are many ways to write Rock, Paper, Scissors. In this version, we will err on the side of object orientation for each “choice”, and the win/loss mechanism will be a method inside the Game class.

Installing Dependencies

If you haven’t done so already, install Composer...

Read More

New Job!

I always experience an unreasonably high level of vicarious anxiety when I watch movies that involve the main characters in any type of vehicle that’s rapidly accelerating out of control, usually towards a collapsed bridge/tunnel/overpass, even though you KNOW it’s going to be okay and they’re not actually going to kill off Keanu Reeves and Sandra Bullock’s characters with a full 20 minutes left of the movie, because if Americans wanted our movies to make us feel bad, we would just watch foreign films.

In an imperfect analogy, the last week of my life kind of felt like that. There was no collapsed bridge, but my student visa was rapidly approaching its expiration date, and along with it — my ability to continue to stay in the UK. I’d been...

Read More

Christmas Morning Reflections

When I was in the sixth grade, I had a gym teacher who was really, and I mean, REALLY enthusiastic about exercising. He claimed to shower three times a day, because that’s just how much he exercised. I thought he was absolutely nuts, because it’s one thing to enjoy exercise for the endorphins, but what sane person exercises that much? In the week before we went on holiday break, I remember that he said to us that Christmas should not be a time to sit around and stop taking care of your physical health. A lot of people view it as an excuse to neglect their usual exercise routines, but he viewed the long holiday as an opportunity – with the extra downtime, he could do EVEN MORE LEG PRESSES!

Read More

Week Two at Makers Academy

Week 2 at Makers Academy presented a host of new challenges. During Week 1, it would not be accurate to say that there was hand-holding, but the Boris Bikes project that we built in pairs came with a much more in-depth tutorial than our project for Week 2, which was to build a working skeleton for a simple Battleships game. Where Week 1’s difficult gradually crept upward as the week went on (with a slightly steeper climb when London TDD was introduced!), in Week 2, at some points it truly felt like we came up against a huge wall that would challenge even Tormund Giantsbane to scale…

1. Working in teams is really, really hard.

MA has designed the course to capture the reality of working as a developer...

Read More

Week One at Makers Academy

For twelve weeks, I will be taking an intensive web developing and coding course at Makers Academy. For those who are unfamiliar, Makers Academy is one of many popular “tech boot camps” springing up all over the world. In large part this is a response to the fact that technology is one of the fastest-growing and most dynamic industries in the world right now, while in many major cities, the supply of talented people with technical skills outstrips demand.

My intention for this series is to chronicle the content progression in the course, but only as a secondary goal. Many other blogs have been written about Makers Academy, all of which are worth checking out if you are considering Makers or any other intensive coding course. My primary goal is...

Read More

Ten Days in London

Recently, my friend Chrystal visited me in London for ten days. Being awesome (and probably WAY too trusting!), she let me plan pretty much every detail of her visit. And being very, very Type A, I probably got more joy out of planning the minutia than any reasonable person should, ever. It later occurred to me that it could be helpful to other London visitors to see the itinerary that I put together for her visit. Without further ado, here it is!

Many of the plays and one-off events were booked about a month in advance. However, there are many events happening in London all the time, that can easily be substituted. I always check a few key Twitter profiles to see what’s going on: @SkintLondon, @TimeOutLondon, @Londonist, @LondONtheInside, and...

Read More

The Great Birdhouses of Westeros

Last year, I went home for about a month after quitting my job in NYC, and found myself feeling bored and creative at the same time. I paid a visit to the place where I sank all of my childhood pocket money: the arts and crafts store.

I wandered around the aisles, not really sure what my upcoming project was going to be. I was about to settle for a pad of heavy-duty paper and some watercolor paints and brushes, when these cheap, cute little decorative birdhouses caught my eye. They were $1 each, and they were definitely too small to house any real bird. I snatched up four of them, bought some acrylic paints, and went home to ponder how I would decorate them.

I’ve gone to my share...

Read More

Monopoly Pub Crawl

I haven’t died. I did, however, move to a new country since the last update and utterly forget that I had this blog. In the UK so far, I have met David Cross, sat three feet away from Kevin Spacey, ordered my dinner off an iPad at a restaurant, and hopped a fence in a city farm to frolic with sheep. Those adventures will be documented in further detail at a later date.

The pub is a curious institution in England. It’s an extension of the living room — a communal space that is multipurposeful in a way that bars in the US are not. Business meeting? Post-ultimate frisbee practice socializing? Family reunion? Done with classes for the afternoon? Head to the pub.

In honour (!! look at that) of...

Read More