KA Engineering

KA Engineering

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


Upcoming fortnightly post

App Engine Memcache Performance

by Ben Kraft on May 1

Latest posts

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 December 12

Prototyping with Framer

Nick Breen on October 3

Evolving our content infrastructure

William Chargin on September 19

Building a Really, Really Small Android App

Charlie Marsh on August 22

A Case for Time Tracking: Data Driven Time-Management

Oliver Northwood on August 8

Time Management at Khan Academy

Several Authors on July 25

Hackathons Can Be Healthy

Tom Yedwab on July 11

Ensuring transaction-safety in Google App Engine

Craig Silverstein on June 27

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

Craig Silverstein on June 20

Khan Academy's Engineering Principles

Ben Kamens on June 6

Minimizing the length of regular expressions, in practice

Craig Silverstein on May 23

Introducing SwiftTweaks

Bryan Clark on May 9

The Autonomous Dumbledore

Evy Kassirer on April 25

Engineering career development at Khan Academy

Ben Eater on April 11

Inline CSS at Khan Academy: Aphrodite

Jamie Wong on March 29

Starting Android at Khan Academy

Ben Komalo on February 29

Automating Highly Similar Translations

Kevin Barabash on February 15

The weekly snippet-server: open-sourced

Craig Silverstein on February 1

Stories from our latest intern class

2015 Interns on December 21

Kanbanning the LearnStorm Dev Process

Kevin Dangoor on December 7

Forgo JS packaging? Not so fast

Craig Silverstein on November 23

Switching to Slack

Benjamin Pollack on November 9

Receiving feedback as an intern at Khan Academy

David Wang on October 26

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

Chelsea Voss on October 12

i18nize-templates: Internationalization After the Fact

Craig Silverstein on September 28

Making thumbnails fast

William Chargin on September 14

Copy-pasting more than just text

Sam Lau on August 31

No cheating allowed!!

Phillip Lemons on August 17

Fun with slope fields, css and react

Marcos Ojeda on August 5

Khan Academy: a new employee's primer

Riley Shaw on July 20

How wooden puzzles can destroy dev teams

John Sullivan on July 6

Babel in Khan Academy's i18n Toolchain

Kevin Barabash on June 22

tota11y - an accessibility visualization toolkit

Jordan Scales on June 8


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!