KA Engineering

KA Engineering

We're the engineers behind Khan Academy. We're building a free, world-class education for anyone, anywhere.


Latest posts

Creating Query Components with Apollo

Brian Genisio on June 12

Migrating to a Mobile Monorepo for React Native

Jared Forsyth on May 29

Memcached-Backed Content Infrastructure

Ben Kraft on May 15

Profiling App Engine Memcached

Ben Kraft on May 1

App Engine Flex Language Shootout

Amos Latteier on April 17

What's New in OSS at Khan Academy

Brian Genisio on April 3

Automating App Store Screenshots

Bryan Clark on March 27

It's Okay to Break Things: Reflections on Khan Academy's Healthy Hackathon

Kimerie Green on March 6

Interning at Khan Academy: from student to intern

Shadaj Laddad on Dec 12, 2016

Prototyping with Framer

Nick Breen on Oct 3, 2016

Evolving our content infrastructure

William Chargin on Sep 19, 2016

Building a Really, Really Small Android App

Charlie Marsh on Aug 22, 2016

A Case for Time Tracking: Data Driven Time-Management

Oliver Northwood on Aug 8, 2016

Time Management at Khan Academy

Several Authors on Jul 25, 2016

Hackathons Can Be Healthy

Tom Yedwab on Jul 11, 2016

Ensuring transaction-safety in Google App Engine

Craig Silverstein on Jun 27, 2016

The User Write Lock: an Alternative to Transactions for Google App Engine

Craig Silverstein on Jun 20, 2016

Khan Academy's Engineering Principles

Ben Kamens on Jun 6, 2016

Minimizing the length of regular expressions, in practice

Craig Silverstein on May 23, 2016

Introducing SwiftTweaks

Bryan Clark on May 9, 2016

The Autonomous Dumbledore

Evy Kassirer on Apr 25, 2016

Engineering career development at Khan Academy

Ben Eater on Apr 11, 2016

Inline CSS at Khan Academy: Aphrodite

Jamie Wong on Mar 29, 2016

Starting Android at Khan Academy

Ben Komalo on Feb 29, 2016

Automating Highly Similar Translations

Kevin Barabash on Feb 15, 2016

The weekly snippet-server: open-sourced

Craig Silverstein on Feb 1, 2016

Stories from our latest intern class

2015 Interns on Dec 21, 2015

Kanbanning the LearnStorm Dev Process

Kevin Dangoor on Dec 7, 2015

Forgo JS packaging? Not so fast

Craig Silverstein on Nov 23, 2015

Switching to Slack

Benjamin Pollack on Nov 9, 2015

Receiving feedback as an intern at Khan Academy

David Wang on Oct 26, 2015

Schrödinger's deploys no more: how we update translations

Chelsea Voss on Oct 12, 2015

i18nize-templates: Internationalization After the Fact

Craig Silverstein on Sep 28, 2015

Making thumbnails fast

William Chargin on Sep 14, 2015

Copy-pasting more than just text

Sam Lau on Aug 31, 2015

No cheating allowed!!

Phillip Lemons on Aug 17, 2015

Fun with slope fields, css and react

Marcos Ojeda on Aug 5, 2015

Khan Academy: a new employee's primer

Riley Shaw on Jul 20, 2015

How wooden puzzles can destroy dev teams

John Sullivan on Jul 6, 2015

Babel in Khan Academy's i18n Toolchain

Kevin Barabash on Jun 22, 2015

tota11y - an accessibility visualization toolkit

Jordan Scales on Jun 8, 2015


It's Okay to Break Things: Reflections on Khan Academy's Healthy Hackathon

by Kimerie Green on March 6

For the past few months, I have been working as a Software Engineering Fellow at Khan Academy. This program gives engineers from non-traditional backgrounds the opportunity to build their experience by working on real products alongside full-time engineers. During my time as a fellow, I’ve had the opportunity to work with amazing engineers and work on projects that have had immediate impact on Khan Academy’s users. I was attracted to this role because of my own background working for education nonprofits. The fellowship has given me tangible engineering experience while allowing me to pursue my passion for increasing educational equity for all learners.

A few weeks ago, we had our internal Healthy Hackathon where everyone across the company worked on projects related to anything from improving KA products, creating internal tools to make everyone’s lives easier, creating applications to improve greater society (beyond education), or anything that fosters curiosity, collaboration, and fun.

I worked on a project called “Read-to-Me” that used Mozilla’s Web Speech API to read widget content created in Perseus aloud in our Early Learner products. This minor improvement allows young learners who are still building their reading skills to have additional support when completing exercises on our platform. I was excited to work on a project that would better support all early learners regardless of their backgrounds. Many of the gaps in achievement that form between low-income and students of color and their more affluent counterparts begin in early childhood. This project aligned perfectly with my desire to increase equity in education. Additionally, I was able to work with/learn from two experienced engineers and play around with a really cool experimental web technology!

I had so much fun working on this project, but it wasn’t without challenges. Perseus is one of the most complicated parts of our codebase, and it was hard to decide where and how the API should be used in existing code that had a lot of complexity. We didn’t end up shipping Read-to-Me (it definitely needs a few rounds of code review and some design help), but I am really proud of what we were able to achieve. Through this project, I learned a few lessons that I hope will continue to support me as I continue to grow and reach my fullest potential as a software engineer (and hopefully this will be helpful others too):

Endless Curiosity Beats Getting the Answer Right Away: One way that I have learned to persevere through tough spots is by channeling my curiosity about the problem I am trying to tackle. I spent a lot of time looking at Perseus code (probably too much time) figuring out how it works under-the-hood and mapping it back to behaviors I saw in the exercise editor . A lot of it didn’t make sense, but eventually, I was able to figure out a suitable place in the code to implement the API. It wasn’t perfect, but it ended up being enough to help my hackathon team move forward with our project. There’s a world of technical challenges out there just waiting to be solved. Be open and willing to dive in even if it means going through multiple iterations before reaching a solution.

Try it. You’ll Like it: I’ve been very hesitant to try experimental technologies. Because I am early in my career as an engineer, I fall into a trap of wanting to become really good at React or some other established technology before diving into something new. The reality is one could spend a lifetime learning to be really good at something, and engineering is one of those professions where one must constantly learn new things (or even refresh on old concepts). Playing around with the Web Speech API made me more excited to explore other experimental technologies in web development. I learned that as I continue to build upon fundamentals, I should make space for joy, fun and exploration in coding.

It’s Okay to Break Things: A part of learning, growing, and understanding tools/technologies is being in the muck before we have clarity around how something works, where something should go, and how something should be built. Sometimes we don’t know the path forward, and we still have to be okay with saying, “onward” until a solution crystallizes. When learning, we must break things and experience confusion. I’m pretty sure I spent most of the hackathon debugging weird error messages as a part of figuring out how Perseus works than I did creating an elegant solution. It was only by breaking something that I was able to figure out how to move forward. This lesson will probably be the most difficult to live out everyday in my work because failure is hard, even for individuals who have a cultivated a growth mindset for a long time. Although, I don’t intend to take down an entire website for the sake of learning, there’s something to be said for having the courage to try things even if it means they won’t necessarily work out. There’s so much learning in our shortcomings. I hope I have more of these moments because it means I’m learning and growing not only as an engineer, but also as a human.

Who knew I would gain so much from a hackathon! I’ve had an amazing experience so far as a Fellow at Khan Academy, and I hope to carry these lessons and so much more throughout my career. Onward!