K

Khan Academy Engineering

engineering.khanacademy.org · Company blog · on HN since 2015

Khan Academy's engineering team writes about its tech stack, including Go, Kotlin, React Native, and Google App Engine.

What HN saysHN commenters recommend it for App Engine and React topics, cite the Go rewrite post, and mention it in hiring threads.
45HN people shared it
18linked it in comments
61stories submitted
1.3Kstory points
6 years agolast shared
2015people per year2026

Most-shared posts

  1. 1
    Go + Services = One Goliath Project
    7 people · 428 points · first shared 2019 · 434 comments on HN
  2. 2
    Forgo JavaScript packaging? Not so fast
    6 people · 55 points · first shared 2015 · 23 comments on HN
  3. 3
    Our Transition to React Native
    5 people · 21 points · first shared 2016 · 16 comments on HN
  4. 4
    Kotlin on the server at Khan Academy
    4 people · 3 points · first shared 2018 · discussion on HN
  5. 5
    How we successfully handled 2.5x traffic in a week
    3 people · 161 points · first shared 2020 · 94 comments on HN
  6. 6
    Inline CSS at Khan Academy: Aphrodite
    3 people · 4 points · first shared 2016 · discussion on HN
  7. 7
    tota11y – an accessibility visualization toolkit
    3 people · 4 points · first shared 2015 · discussion on HN
  8. 8
    Working Remotely
    2 people · 8 points · first shared 2017 · discussion on HN
  9. 9
    Engineering Principles Can Help You Scale
    2 people · 5 points · first shared 2019 · discussion on HN
  10. 10
    Building a Really, Really Small Android App
    2 people · 5 points · first shared 2016 · discussion on HN
  11. 11
    Untangling Khan Academy's Python Code
    2 people · 4 points · first shared 2018 · discussion on HN
  12. 12
    The Great Python Refactor of 2017 and Also 2018
    2 people · 4 points · first shared 2018 · discussion on HN
  13. 13
    Starting Android at Khan Academy
    2 people · 3 points · first shared 2016 · discussion on HN
  14. 14
  15. 15

What HN people wrote when they linked it

r3mko · 2017-04-21
Khan Academy's engineering blog is great if you're into Google App Engine, React, ... http://engineering.khanacademy.org
dangoor · 2020-03-23
Khan Academy | Mountain View, CA and REMOTE USA/CANADA | Senior Backend / Fullstack | https://khanacademy.org/careers We're a non-profit with a mission to provide a free, world-class education to anyone, anywhere. It's a big mission that we're taking on step by step. While we want anyone to be able to get a great education independently, we've been focusing a lot on trying to help teachers working in their classrooms (and a lot of teachers and parents are using Khan away from their classrooms right now!) Our site has been built on Python 2 and Google App Engine for its first 10 years of existence. We're now in the midst of a rebuild in Go (still on App Engine).[1] Parts of that new Go-based infrastructure are already running in production. To say that this is an exciting time for us would be an understatement, I think, but we continue to have working sustainably as an engineering principle. (Our principles are available publicly[2].) [1]: http://engineering.khanacademy.org/posts/goliath.htm [2]: https://docs.google.com/presentation/d/1ZQ-HTuH38L8sf4ZObfJNlESpzYIPAP…
kamens · 2016-03-01
Khan Academy | Mountain View, CA or REMOTE | full-time and internships We're a small, non-profit tech startup bringing a free, world-class education to anyone, anywhere. Millions of people use our free educational platform to learn every month. The testimonials at https://www.khanacademy.org/stories will give you a feel for just how intense an impact Khan Academy has on the lives of folks in all sorts of varied situations. We face intense technical challenges in providing access to our educational content (everything from videos to interactive content) to students across the world, in and out of classrooms, in all the most important languages. We use our data to personalize students' learning and continually improve our educational content + the tools we provide content creators. And we need more help. We've made some great hires off HN and would love to make more (especially if you're a designer or Android dev, wink wink, we're investing heavily: http://engineering.khanacademy.org/posts/starting-android.htm) Best way to apply is at https://www.khanacademy.org/careers, but if you email me w/ a subject line that mentions 'monkeys' somewhere I'm partial to those, too. ben@...
guessmyname · 2020-05-13
Khan Academy uses Python [1], Google App Engine [2], React.js [3] and recently Go [4] among other languages [5]. They have used Backbone.js [6] and experimented with other programming languages like Kotlin [7]. Read their engineering blog [8] and you will know more and maybe learn a few things. [1] http://engineering.khanacademy.org/posts/python-refactor-1.htm [2] http://engineering.khanacademy.org/posts/transaction-safety.htm [3] http://engineering.khanacademy.org/posts/upgrade-buttons-links.htm [4] http://engineering.khanacademy.org/posts/goliath.htm [5] https://github.com/khan/ [6] http://engineering.khanacademy.org/posts/upgrade-buttons-links.htm [7] http://engineering.khanacademy.org/posts/kotlin-adoption.htm [8] http://engineering.khanacademy.org/
minhazm · 2020-05-13
I know you're joking, but they actually are doing a Go rewrite. https://engineering.khanacademy.org/posts/goliath.htm
RenierZA · 2020-03-29
Here is the article explaining their plans to move to Go. https://engineering.khanacademy.org/posts/goliath.htm
vmasto · 2017-02-24
Sorry for the late reply. Multiplexing is not a panacea, there's still some overhead, and even if there wasn't there's still a point where you start to lose lot of performance by limiting gzip compression (the smaller the file the less efficient the compression is). You can read more about why we'll always need a bundling step at the following links: http://engineering.khanacademy.org/posts/js-packaging-http2.htm https://medium.com/@asyncmax/the-right-way-to-bundle-your-assets-for-f… https://medium.com/webpack/webpack-http-2-7083ec3f3ce6#.74q6ro5kl
matchu · 2016-12-08
Bandwidth was the major motivation for building Aphrodite, too: Khan Academy wanted to decrease the number of bytes required for the initial pageload. http://engineering.khanacademy.org/posts/aphrodite-inline-css.htm > We must deliver the absolute minimum amount of CSS necessary by only sending down CSS in use by components in the server-side rendered body. This rules out extracting all the CSS used in all of our components at compilation time, as much of that CSS would not be needed for the initial page load. Colocating styles with components is a win, but, more importantly, styles-as-JS-objects was the simplest way to get this perf feature out the door.
jkaptur · 2016-09-14
> The online MOOCs aren't going to introduce braille. In general, putting content online makes learning more accessible. As a specific example, Khan Academy has done important work developing tools in this area: http://engineering.khanacademy.org/posts/tota11y.htm. I see where you're coming from - many "dispuptive" services have (shamefully, in my opinion) resisted making their services accessible, but I don't think MOOCs really fall into that class.
sotojuan · 2016-07-26
Sort of agree but I would've liked to see how John Resig manages his time. That said, Khan Academy has some interesting tech: http://engineering.khanacademy.org/posts/aphrodite-inline-css.htm
spicyj · 2016-05-31
A friend of mine just wrote an article on this: http://engineering.khanacademy.org/posts/shortest-regex.htm
_alexander_ · 2016-01-12
prezjordan · 2015-06-29
Hey HN! I built this utility with the help of two colleagues[0][1] after working on accessibility at Khan Academy for a few weeks, and seeing first-hand the process of evangelizing accessibility on a dev team. Our automated tests were far from approachable (and became more annoying than helpful), so we built tota11y to make the manual testing experience more interactive and educational (we like teaching things). I touch on this in our engineering blog [2] Anyway, super thrilled to see tota11y near the top of HN this morning, and happy to answer any questions you may have. [0]: https://twitter.com/himichelletodd [1]: https://twitter.com/rileyjshaw [2]: http://engineering.khanacademy.org/posts/tota11y.htm
josephscott · 2018-02-13
That is the theory. The real world however can be very messy. More than two years ago Khan Academy measured how this would work for them - http://engineering.khanacademy.org/posts/js-packaging-http2.htm - here was their summary: > The reality is not so rosy. Due to degraded compression performance, the size of the data download with individual source files ends up being higher than with packages, despite having achieved 'no wasted bytes'. Likewise, the promised download efficiency has yet to show up in the wild, at least for us. It seems that, for the moment at least, JavaScript packaging is here to stay. My personal experience has been you have to confirm the theory of how HTTP/2 related changes will perform with actual measurements. I've seen some pages get faster in HTTP/2 by no longer bundling, and in other cases seen then become slower. So far the only way to know for sure is to measure the result.
magicalist · 2015-11-28
> It's been found that resource concatenation is still more efficient http://engineering.khanacademy.org/posts/js-packaging-http2....* for a page with 2.4MB of JS spread over 296 files. And, notably, the article doesn't advocate for serving individual files in the first place, but instead says that some level of grouping is likely advantageous, but http2 gives new opportunities which will need to be explored, like grouping by level of churn in libraries or by units of functionality > And 'building for http2' seems to be advocating hashes in filenames without neccesarily walking the dependencies I believe you misread. They use a shallow tree in their scout js file; all of the resources a page will need are declared there and nothing is loaded in succession. > Manifest files are a bad idea, except perhaps for instructing webservers to tell browsers to preemptively download files. AFAIK there isn't a standard for this yet so a manifest doesn't solve the problem I'm not sure what this means. The manifest is generated by the build process. There is no standard for dependency manifests, sure, but there's no reason you can't whip a reasonable one up that a simple server module could understand if you wanted to add push support. Eventually the cow paths will be paved and we'll come up with a more standardized approach (or approaches) to that kind of manifest.
holloway · 2015-11-28
It's been found that resource concatenation is still more efficient http://engineering.khanacademy.org/posts/js-packaging-http2.htm And 'building for http2' seems to be advocating hashes in filenames without neccesarily walking the dependencies, which can have cache problems http://holloway.nz/r/hashes-in-filenames/ ES6 imports are static (you can't use JS to dynamically include a file) so this means transitive dependencies need to be resolved at build time, not by using a manifest file which resolves paths clientside. This also applies to (eg) SVGs that reference JPEGs because you probably don't want JS involved there either. Manifest files are a bad idea, except perhaps for instructing webservers to tell browsers to preemptively download files. AFAIK there isn't a standard for this yet so a manifest doesn't solve the problem. Ps. I've got a gulp build for http2-style packing and I'll release it on my github in a few weeks (same account as my username)

Keyboard shortcuts

/Search
j kNext / previous blog
EnterOpen selected blog
vVisit the blog site
fFollow / unfollow
lSwitch grid / list view
dSwitch dark mode
g hHome
g pTop posts
g tTopics
g fFollowing
g lLiked
g yHistory
g qFAQ
EscBack / close