I'm going to take a stab at this primarily based on info on their jobs page:
The tech: main app is node.js with nginx. They also use Java, one might guess for heavy-computational stuff. Redis is used as well, probably for recommendation/collection feeds. Medium relies heavily on AWS services, as they use EC2, EBS, S3, Route53, EMR, DynamoDB, SQS, CloudFront and SES. All their assets are being served via CloudFront.
On the front-end, I'm guessing they built their own JS framework. The WYSIWYG editor, the stats page, etc. leads me to believe it wasn't from a preexisting framework. Technology wise, they're using Closure and LESS.
Jumping to the server, I believe they're using their own MVC framework called Matador, which they open-sourced a while ago: Medium/matador
The question author asked about speed, so I did some digging to find out what was under the hood. Turns out, when you browse Medium, you never go to a new page. Medium simply loads the 'page' into a new div in the container, sets the old page to 'display: none' and updates the URL and title.
- <div class="container" id="container">
- <div id="container-_obv.shell._screen_1356807256822" style="display: none; visibility: hidden;"></div>
- <div id="container-_obv.shell._screen_1356807256823" class="container-surface" style="display: block; visibility: visible;"></div>
- </div>
Inside each of these div's is an <article> containing the page content. Very clever. Even better, when hitting the back button, Medium simply displays the old div, rather then creating a new one. Try it out for yourself – going to a previous page is lightning-fast. There also appears to be a time-out on these 'pages'. After 5-10 minutes or so, they delete themselves to maintain a tidy DOM.
Overall, Medium's strong front-end execution leads to a really delightful user experience.
Sources: