This article first appeared on the Khan Academy Engineering blog and is reprinted here with permission.
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!