Intro to Web Development (MIT Blueprint 2014)

I recently led a workshop on basic HTML and CSS at Google Cambridge for MIT’s Blueprint, a 14-hour event for high school students interested in software development and computer science. My talk assumes no prior knowledge and walks you through a simple HTML and CSS website, teaching fundamentals like the box model, classes vs. ids, and more.


HTML (index.html)

    <title>My Website</title>
    <link rel="stylesheet" href="styles.css" />
    <div class="wrapper">
      <div class="top">
        <h1>Blueprint is awesome!</h1>
        <p>Hi! Welcome, I'm learning HTML and CSS. Built by Frank at <a href="">Blueprint 2014.</a></p>
      <div class="about">
        <div class="column" id="column1">
          <h2>Feature 1</h2>
          <img src="1.png"><br /><br />
          Why we are the best.
        <div class="column" id="column2">
          <h2>Feature 2</h2>
          <img src="2.png"><br /><br />
          Why we are the most fun.
        <div class="column" id="column3">
          <h2>Feature 3</h2>
          <img src="3.png"><br /><br />
          Why we are the most awesome.
      <div class="bottom">
        <h2>You'll love our awesome features.</h2>

CSS (styles.css)

body {
  background: #d9d9d9;
  font-family: "Helvetica Neue", Helvetica, Arial, Sans-serif;
  text-align: center;

h1 {
  font-size: 50px;

a {
  color: #D7E0E6;

.wrapper {
  margin: 0 auto;
  width: 900px;

.top {
  color: #D7E0E6;
  background-color: #0099F8;
  padding: 50px;
  margin: 30px 0 0 0;

.about {
  display: inline-block;
  margin: 15px 0 0 0;

.column {
  background-color: #CE4D4F;
  color: #263039;
  height: 210px;
  width: 260px;
  float: left;
  padding: 20px 15px;
  text-align: center;

#column1 {
  margin-right: 15px;

#column2 {
  margin-right: 15px;

.bottom {
  color: #D7E0E6;
  background-color: #092F4B;
  padding: 50px;
  text-align: center;
  margin: 15px 0 30px 0;

WeChat Isn't a Messaging App - A Closer Look at China's Hottest App


My parents currently live in China and they, like pretty much all of China nowadays, actively use WeChat. The last year, I’ve used WeChat more and more to communicate with them, but I could never understand why they and so many others were so drawn to WeChat over alternative messaging apps like iMessage. Despite a clunky interface, slow load times, and a design language that feels more 2008 than 2013, WeChat’s Chinese adoption numbers have been off the charts, with over 400 million worldwide users and no signs of slowing in Asia.

I’m currently home in China for the holidays and I’ve had some time to observe how my parents are using WeChat, how my sister is using it, and how strangers on the street and on the subway are using it. What I’ve seen has definitely surprised me.

Most importantly, I’ve noticed that WeChat isn’t a messaging app. I had originally thought that messaging was the main focus of WeChat. Instead, it performs a role best described as an interesting blend between messaging, social gaming, Twitter, and Facebook.

For a lot of people, WeChat is the start and end of their phone usage. Need to talk to someone? Send them a text message or leave them a voice message. Want to see what your friends are up to? Go to “Moments”, where you can view a stream of their activity and post an update of your own. Want to play games? Play from within WeChat.

“Moments” is probably the most used feature of the app. It’s basically a social network that lies adjacent to the app’s basic messaging features, where users have profiles where they can post photos and statuses and change their profile pictures and cover photos. Like Facebook, you can publicly like and comment on posts. However, the “Moments” feature is buried two levels deep, much like how Twitter’s direct messaging functionality was before the most recent update (version 6). To get to it, you have to first enter the Discover tab and before seeing others use it, I had personally never visited it.

The reason why WeChat is doing so well, though, is because its other features are definitely not ignored. WeChat, as an app, is very versatile, leading to insanely high user retention. Its chatting and messaging features, complete with chat backgrounds and stickers, have found popularity amongst the QQ crowd that provided the initial traction for WeChat (it’s interesting to note that QQ and WeChat are both owned by the same company, Tencent, and that they successfully leveraged this existing userbase to launch WeChat). The messaging features serve as a replacement for email, texting, and IM. Like WhatsApp, a lot of people are opting to replace their traditional SMS plans with more data and using WeChat to fill in the gap. Throw in the network effect, and even those that don’t choose to forego SMS find themselves on WeChat more and more as well in order to interact with their friends.

Hold to talk on WeChat

Screenshot from WeChat's website

But it isn’t just text messaging that is helping to drive WeChat’s user retention. I was pretty surprised by how popular the walkie talkie (push-to-talk) feature is for communication, which I believe stems from how difficult it is to enter Chinese characters on a phone. It’s not uncommon to see people walking down the street or on the subway, speaking in quick 2 to 3 second bursts on their WeChat accounts. Instead of calling one another, a lot of Chinese people choose to use these walkie talkie conversations, giving them the benefits of asynchronous communication coupled with the power of voice. I’m also suspecting that more and more people are starting to substitute their phone service with WeChat’s walkie talkie feature as well, making an average Chinese user’s phone plan pretty heavily focused on 3G data.

So… what?

WeChat has grown so quickly because of its versatility and all-encompassing nature. I’d guess that the only app a lot of people in China use is, in fact, WeChat. My cousins and my family agree. Tencent would probably agree as well.

Tencent is hedging its bets that WeChat can and will own the entire Chinese Internet market. Just yesterday, they’ve launched Weixin TV, a smart TV completely integrated into WeChat, yet another expansion of the WeChat feature base. Instead of focusing on any one particular product and making it better, they’ve decided to throw literally everything under the WeChat umbrella.

This, precisely, is why I believe WeChat will not find the same success in the American market. What Chinese consumers are looking for is an all-inclusive piece of software that does everything they could ever want, whereas American consumers would rather split time between multiple apps in order to get the best possible user experience. In China, where it really is a winner-take-all situation, this isn’t a bad development strategy, but the Western market is entirely different, where I don’t see WeChat gaining mass adoption, at least in its current state. WeChat is part-Facebook, part-Twitter, part-Instagram, part-Tumblr, part-WhatsApp, part-Skype — it does a lot, but it doesn’t do anything exceptionally well. If WeChat wants to seriously compete in the American market, it will have to not only beat pure messaging apps like WhatsApp and iMessage, but also (and most importantly!) everything else that has been thrown into the mix.

Standing in Showers

When I was a child, I remember being paranoid of standing in public showers at the YMCA and even in hotel rooms. I always assumed that I would catch some sort of foot disease from standing where other people had stood before, forcing me to either arch my toes upwards and stand on my heels or to tiptoe around clumsily. Despite the discomfort, I would stumble around in every public shower I found myself in, making sure to cover as little surface area as possible.

In the back of my mind, I always told myself that I was being irrational and that everyone else stood normally in the shower, but for the longest time, I remained completely stubborn about this behavior. But with time, as with most of our childhood quirks, I eventually grew out of it.

A few days ago, I stepped into a hotel shower and instinctively, I didn’t take off the flip flops that were already on my feet. At college, we’re strongly encouraged to wear them in the communal showers. Which leads me to the point — why didn’t I just do this when I was kid?

Simple: no one ever told me to.

I think this story, though quite idiosyncratic, sums up the reason why we are always driven to learn new things and gain new experiences. We don’t know what we don’t know. And what we do know can constantly surprise us — even something so seemingly inconsequential as learning to wear my flip flops in the shower.

What is your “standing in showers” story?

Your Lowest Common Denominator

A few weeks ago, I was headed to a hackathon with some friends and since we didn’t know what we wanted to build yet, we decided to casually throw out ideas to each other during the hour long train ride. Luckily enough for us, the man (let’s call him Calvin) sitting across the aisle from us loved to talk and despite not knowing much about “cutting-edge” technology or startups, I learned a lot from him on how to build a desirable product and company.

Although Calvin seemed incredibly ambitious, most of his own ideas were not (think Instagram for cats). He was also extremely hard to convince and was unenthused by all of the ideas we threw out. To be fair however, he also didn’t understand most of the ideas that we were coming up with, simply because we couldn’t distill the ideas down simply enough for him to understand.

While our ideas were completely clear in our heads and to each other (despite the fact that we came up with most of the ideas on the spot), they were still obfuscated by random tech/startup jargon that we felt naturally comfortable with. When it became clear that this level of dialogue didn’t work with our newfound audience, we switched gears into more high level descriptions, but still, Calvin didn’t seem to buy what we were saying. Again, this was our fault, not his.

To him, someone who didn’t really “get” tech, the innovativeness and creativeness of our ideas didn’t seem to change his opinion. What was most important was whether or not we could actually communicate to him what our ideas meant. It didn’t matter whether we allowed him to share pictures of his cats or allowed him to take a picture of his shoes and then magically generate a matching outfit on his iPhone and it certainly didn’t matter to him if we used Rails or Node or Django — if he couldn’t understand what the idea was, then it wasn’t compelling enough to build.

The bottom line here is that if no one can understand what your startup is offering, no one will care and no one will buy or use your product. If you can’t explain it to someone, then there’s no reason why they should be convinced to back you and your product, no matter how great your endgame vision is. So when you’re building something, make sure that you can explain it to any random layperson on the street by determining your lowest common denominator — the most basic and easily understandable idea you want to communicate. Once you nail that down, you can easily add layers of abstraction and detail if necessary. In a sense, it’s like you’re developing an MVP of your pitch — something simple enough that just works and doesn’t include anything else. Anything extra is just fluff and can be thrown away.

This same realization also occurred to me when I was preparing for my YC interview last month. When I talked to past founders about our idea, the biggest piece of advice I received was that I was saying too much while conveying too little. Instead of being able to instantly get a mental picture of what we were doing (Instagram for cats, for example, is a perfect counterexample), it would take two sentences from me before they reached that sudden moment of clarity because I couldn’t explain it simply enough. And these were some of the smartest and most clever people I’ve ever met.

Obviously, it’s hard to explain such complicated things (like your startup) so clearly and succintly, but it’s also what all the good startups do extremely well. Facebook, at its most distilled level, is a social network, Google is a search engine. If what you do is easy to communicate and easy to understand, then it also becomes much easier to get people excited about it, especially if they love and need whatever you’re making. And if they’re excited, chances are that the people you convince will then convince their friends as well, because they truly understand what they’re talking about and can explain it in their own words to others.

When you spend all day solving big problems and thinking about the underlying innovation of your product, it’s easy to forget that people outside of your tiny bubble can’t and won’t understand what you’re talking about at all. You need to remember to take a step back, wipe the slate clean, and look at things with a beginner’s mind. Build for the “Calvins” of your customer base — the people who want your product and would wholeheartedly support you if only they could understand what you’re doing.

So start small and focus on the basics. Figure out your lowest common denominator. Simplify.

Lessons Learned from Going "Profitable" in Under an Hour

Around two months ago, when Hurricane Sandy struck the East Coast, my roommates and I launched a charity t-shirt campaign called Shirts for Sandy from the safety of our dorm room. The university placed us into lockdown for two days, keeping us indoors as the storm continued its destructive path, and I decided that it was the perfect opportunity to help the community while also flexing my entrepreneurial muscle. Within a few hours of conception, we had a t-shirt design completed, a website up and running, and our first sales already accounted for, the first of which came within an hour of launching the site. Since we donated all of our profits to the relief effort, I put profitable in quotation marks in the title — in essence, however, we were profitable as soon as we received our first sale, which covered the price of the domain (hosting was free on an AWS S3 bucket).

This post discusses the business lessons I learned from the entire process. Naturally, running a for-profit business will have its differences, but I wanted to record these thoughts for future reference and for others to learn from as well.

  • Start marketing efforts before launch. We began spreading the word about Shirts for Sandy even before we had a completed website. Starting with a Facebook page, we each invited all of our friends to “like” the page. First, we focused on capturing the attention of our network of friends, which gradually led to more and more people that weren’t in our networks. This also helped us gain the attention of media outlets that further helped to spread the word. When the time came to launch the site, we announced this to our followers and our first sales came flooding in. Because of our social networking pages, we were able to build interest in our product before we even officially had anything set up.

  • Work for your sales. This may seem like common sense, but our sales numbers were directly correlated to the amount of effort we put in to get them. Whenever we successfully received media coverage, we would see a spike in our sales. Whenever we worked hard to talk to people about what we were doing, we would be able to convert these conversations into sales. If you sit back and just hope for sales to come in, you won’t see many sales. You have to work for them.

  • Release first, then iterate. When we first launched, we were highly unprepared — we didn’t have a t-shirt supplier yet, we hadn’t yet decided on a charity to donate the money to, and we weren’t very experienced in dealing with press and customer concerns. Our first interview was with the school newspaper and many people expressed their concerns to us. People wanted to know who we were, what we were doing with the donations, and whether we could be trusted, all valid concerns at the time. That day, we handled all of the concerns one by one, updating the website with clearer language, officially partnering with a local charity that funneled all the money to Sandy relief, and making sure that we were prepared for future media questions. I concede that most of these issues probably should have been handled before we launched the site, but we were handling a time-sensitive problem and our ultimate goal was to help the relief effort as quickly as possible. Even if we did spend more time figuring these things out before, we still certainly would have received feedback that could be used to improve future iterations.

  • Learn as you go. For all of us working on Shirts for Sandy (a team of five), this was our first ever direct response charity effort that wasn’t focused primarily at fundraising at our high schools. Instead, our goal was to leverage the power of the internet to deliver much needed help to our neighbors who were hit hard by the storm. We ran into many problems along the way and had some high-stress situations where we wondered whether or not we could keep going — for example, our first t-shirt deal fell through and we wanted to keep our costs as low as possible — but we eventually tackled all of these challenges by gritting our teeth and carrying on. Experience is something that has to be gained, so it’s best to jump headfirst into something and then learn the things you don’t know along the way.

  • Find a great team. No matter how skilled or talented you think you are, there’s always someone who can help you out. Whether you’re running a business or a non-profit organization, one of the most important things is having people around you with a common goal, people that you can completely trust and rely on, as well as complementing your own individual skill set. I just mentioned that you should learn how to do things as you go along and a lot of these lessons are learned from your teammates. It’s a great feeling to know that while you’re working on building the website or the product, someone else can be designing the shirt, someone else can be looking up t-shirt printing companies, and yet another person can be emailing local press outlets for coverage.

  • Don’t rely on the press to spread the word for you. Since we were raising money for charity, we found a wide range of media outlets willing to cover us, but even so, only about a quarter of the outlets we reached out to replied back to us. Our Hacker News post, for example, was completely ignored. I didn’t expect to find much of an audience on HN, but I decided to post anyways, which is the mindset that you have to have when trying to get press for your startup. Your marketing strategy can’t rely on TechCrunch or HN — even if you don’t find the coverage you want, you have to keep going and find alternatives.

You can send donations to the relief effort or purchase a shirt from us over at the Shirts for Sandy website. If you want to donate directly to the relief effort instead, please do so through your favorite charity.