Khan Engineering

Khan Engineering

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


Latest posts

Making Websites Work with Windows High Contrast Mode

Diedra Rater on March 21

Kotlin for Python developers

Aasmund Eldhuset on Nov 29, 2018

Using static analysis in Python, JavaScript and more to make your system safer

Kevin Dangoor on Jul 26, 2018

Kotlin on the server at Khan Academy

Colin Fuller on Jun 28, 2018

The Original Serverless Architecture is Still Here

Kevin Dangoor on May 31, 2018

What do software architects at Khan Academy do?

Kevin Dangoor on May 14, 2018

New data pipeline management platform at Khan Academy

Ragini Gupta on Apr 30, 2018

Untangling our Python Code

Carter J. Bastian on Apr 16, 2018

Slicker: A Tool for Moving Things in Python

Ben Kraft on Apr 2, 2018

The Great Python Refactor of 2017 And Also 2018

Craig Silverstein on Mar 19, 2018

Working Remotely

Scott Grant on Oct 2, 2017

Tips for giving your first code reviews

Hannah Blumberg on Sep 18, 2017

Let's Reduce! A Gentle Introduction to Javascript's Reduce Method

Josh Comeau on Jul 10, 2017

Creating Query Components with Apollo

Brian Genisio on Jun 12, 2017

Migrating to a Mobile Monorepo for React Native

Jared Forsyth on May 29, 2017

Memcached-Backed Content Infrastructure

Ben Kraft on May 15, 2017

Profiling App Engine Memcached

Ben Kraft on May 1, 2017

App Engine Flex Language Shootout

Amos Latteier on Apr 17, 2017

What's New in OSS at Khan Academy

Brian Genisio on Apr 3, 2017

Automating App Store Screenshots

Bryan Clark on Mar 27, 2017

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

Kimerie Green on Mar 6, 2017

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


The weekly snippet-server: open-sourced

by Craig Silverstein on Feb 1, 2016

When I joined Khan Academy, my first project was to write a version of the weekly-snippet server I had worked with at Google. Years later, with the help of many intrepid Khan Academy employees (one such employee, another such employee, a third such employee, you get the idea), it's ready for the world!

While there are many snippet systems out there, this one is optimized for simplicity (also, free-ness). For instance, it prefers single webpages with lots of info over paging, queries, or fancy JavaScript. Filling out a snippet involves writing into a textbox: no fields or text editors or other barriers to productivity. (Markdown is available for those who want nice formatting.) This makes it easy to learn and easy to program against.

What are weekly snippets?

A weekly snippet is an (ideally) brief description of what you did the last week. What is brief? The snippet-entry textbox is sized for 4 bullet-point entries, each 80 characters or less:

Snippet-entry page

Your snippets are visible to everyone else on your email domain. (So my snippets are visible to everyone who logs in to KA snippet server with a email address.) Depending on your configuration options, they may also be visible to everyone else on your server.

Snippet-view page

(You may notice, on this page, a bunch of people have not entered snippets. At Khan, that's perfectly ok. This is a tool for people to use if they find it useful, and ignore if they don't.)

Why have snippets?

Different people might use weekly snippets for different purposes:

  • Instead of a weekly standup or other meeting where everyone shares what they've done in the last week, they can just read (and write) snippets.
  • Managers can read snippets of their direct reports to make better use of 1-on-1 meetings.
  • You can look over your own snippets when writing a self-evaluation or applying for a promotion, or when you have any other need to remind yourself what you've worked on.

I've found this last reason is particularly compelling. I also use snippets as a simple "time and motion" study: when I have too many things to put into snippets one week, I know I'm being spread too thin!

Another benefit of snippets is serendipitous helping: by reading someone's snippet, you may discover a task or problem they're working on that you can help with, that otherwise you would never have known about.

What are snippets not good for?

Some people go into a snippet system with unrealistic expectations and are disappointed.

  • Snippets do not work well for large groups, say over 100 people. If you have 1000 people using your snippet server, it is neither practical nor useful to read through everyone's snippets every week.

  • Snippets are, by design, a low level tool: they show you trees but not the forest. The snippet system does not support "rolling up" groups of snippets or having team-based snippets (though certain individuals could certainly choose to have their own snippets refer to a team's progress).

  • Snippets do not provide context. If you don't already know what someone is working on, their snippet may enlighten you, but it will just as likely confuse you.

At Khan Academy, the entire company uses one snippet server. The snippets are divided into various categories, some functional, some project-based. I like to skim over the snippets for people in unrelated categories such as "facilities" or "recruiting." I read more closely the snippets in projects I'm interested in but not working on, such as "mobile." And I read most closely the snippets of people in my own project or closely related projects.

How do you use the snippet-server?

After setting up your settings, to control things like how public your snippets are and whether you want to use plain text or markdown, there are only two web pages: the one where you write your snippets, and the one where you read everyone's snippets for a week.

The administrator can set up the system to send you reminder emails to write snippets, or to email when snippets are ready for a week. (The snippet server can also use chat systems for this.)

The Google connection

The snippet server is built on top of Google AppEngine, and uses Google services for authentication. To use it, you need to clone the snippet github project and then upload it to your own appengine instance. (It uses few resources, so Google's "free tier" would work fine.)

The people using your snippet server must log in using Google (aka Gmail) accounts. The snippet server works particularly well with companies that use Google Apps for Work.

Email and chat

The snippet server integrates with email, HipChat, and Slack.

It can send individual emails to people who have not written a snippet for this week, reminding them to do so. (Users can turn this feature off in their preferences.) It can also send an email to all registered users, at 5pm on Monday, to say snippets are ready.

It can also send reminders and ready messages via chat. (In this case, the reminder isn't [yet] individualized.)

Try it out!

The Snippet Server has been developed in the open since day one, but it hasn't been advertised that well. Now we're looking to change that. Contributors welcome!

We believe that snippets can be a useful tool for a small to medium-sized team, and while there are several snippet server implementations out there, this one's ease of use and low low price makes it an appealing alternative. Try out the server and see what you think.