How our talented team won $2500 at the TechCrunch Disrupt NYC Hackathon

corpsquare_screen1

We had an absolutely amazing and talented team at the TechCrunch Disrupt NYC 2014 Hackathon! Shout outs to our awesome front end designers Amanda Gobaud and Michelle Lee, and our tireless devs, Amine Tourki, Andrew Furman, and Teddy Ku. Here are the lessons that I learned from building a web application that won the $2500 Concur Technologies API first place prize.

  • Our app, CorpSquare (Concur + Foursquare), solved a problem. Several of the team members (me included) used Concur in the companies we worked for. So we had experience with problems or cool and practical use cases that an app designed around the Concur API could do. Even the  Concur VP of Platform Marketing told us afterwards that he had seen many with the problem we were trying to solve.
  • But, we also played the game strategically. Concur is a business expense tracking platform; most of their clients are big businesses. We felt that a business expense API wouldn’t seem as “exciting” or “sexy” as some of the other consumer-facing start-up APIs (Evernote, Weather Underground, to name a few). Since the different companies who sponsored the hackathon had API specific rewards for teams that used their API in the coolest way, this implied that there might be less competition for the Concur API reward. We made a “value” bet of sorts, as value investors would say–the strategy seems to have paid off.
  • Our team’s skills were complementarybut not too much so. A good hackathon team probably needs both design and dev skills, and different people should specialize in one or the other to make things most efficient. But, everyone should be well versed enough in non-specialty skills (like designers in dev, devs in design) to be able to communicate efficiently. For example, our designers were comfortable with both UI/UX design as well front end development like CSS. Several of our developers were full-stack, implementing the back end but also helping out with the front end. We used technologies (frameworks, languages) that we were all comfortable with, which, perhaps out of coincidence for us, was also an advantage.
  • Presentation matters, a lot. Our two wonderful front end designers spearheaded the movement to make our web application beautiful. With the help of everyone, beautiful it was. For the actual 60 second demo, we also selected the most energetic and enthusiastic speakers to present. First impressions matter, but when you’re being explicitly judged in comparison to at least 250 other people, and 60 seconds of talking and app visuals is all you’ve got, first impressions really matter.

Hindsight is 20/20, of course. Causally linking our tactics and strategies to our success is fuzzy at best. But learning never stops; whatever happens, success or failure, there is always something to take away and improve yourself, and others, with.

Spreed – the exciting journey so far, and lessons learned

spreed_step2_cropped_raw

Spreed, the speed reading Chrome extension I developed last year to scratch my own itch, recently took off in popularity. People wrote about it in a few different places, and our installs in Chrome went up dramatically. The journey has just begun, but I’ve already learned some lessons that I wanted to share.

Lessons learned

  • Piggybacking on buzz can be an effective technique to increase awareness
    • We piggybacked (not deliberately) on the buzz created by the launch of Spritz, the speed reading startup. People wanted to learn more about speed reading, and came across our Chrome extension when they searched for it. We could have done better if we had optimized our web presence for the keyword “Spritz” after the launch, but my excitement at going from 2k installs to 20k installs in less than 5 days blinded me. Which leads me to my next lesson…
  • Be aware of emotions, instead of letting them take control
    • My excitement at our growth caused me to naively focus on vanity metrics like installs and visits, which blinded me to the SEO opportunity mentioned above.
    • Another example: I recently almost made a grossly sub-optimal decision regarding the outsourcing of development. Again, I let excitement and optimism tempt me to “forget” to use a disciplined decision making approach. The particular one I like to use is called the WRAP technique (pdf), which I learned from the fantastic book Decisive, by the Heath brothers.
  • To quote Steve Jobs: “A lot of times, people don’t know what they want until you show it to them”
    • We’ve not only developed the features that our users have said would be most helpful to them, we’ve developed (and are developing) game changing features that  we anticipate users will find immensely helpful. We test our hypotheses by collecting feedback from users and doing small tests/experiments. The lesson here, I think applicable to all of life, and not just product development: be proactive instead of just reactive.

What has been most exciting has been working with our users to make Spreed the most helpful it can be. Building things that help people, having those people reach out to thank you, and then having conversations with them to make the product even better has been extremely meaningful. Some excerpts from our most enthusiastic and dedicated users:

“Your chrome app is phenomenal. I have been using it for 4 days now, and still find it hard to believe that such a basic app can change one’s life so much.”

“Thank you so much, this has revolutionized my life.”

“I am a dyslexic and I have always had difficulty reading with full comprehension.  I can’t believe how this has changed this for me.  I can read at 350 words with great comprehension.  What happens for dyslexics is the words flow together sometimes forming new words that aren’t there.  With this app I see only the word!  It is going to be a life changer for me.”

There’s still a lot more to do, but I’m looking forward to the future. Learn by doing and building, strive to help others, and the journey will be an exciting one.

Shout out to Ryan Ma for the beautiful redesign of the Spreed Chrome extension!

 

Weekend hack: AngelList Alumni Bot

screenshot

Ok, it’s more of a scraper than a “bot”. But the reason I developed it was because I was looking through NYC startups on AngelList, and wanted to find founders who had graduated from my alma mater, the University of Pennsylvania. I didn’t want to click through the AngelList startup pages one by one and then click on every founder. There  was no easy way of doing what I wanted, and I also wanted to get to know the AngelList API a little better.

The AngelList Alumni Bot basically gets all startups given an input city (e.g. NYC), grabs the founder’s name, and checks AngelList or LinkedIn to see if they are a graduate of an input school (e.g. University of Pennsylvania).

There are a lot of areas for improvement (e.g. it’s not a web app, it’s really slow, it currently only supports two cities/locations NYC and SV and one school UPenn, it only grabs one founder for each start-up in a very hacky way by exploiting AngelList page meta tags). You can make contributions to the source code at https://github.com/troyshu/angellistalumnibot.

Everything was done in Python. I used and extended, this AngelList API Python wrapper: my extended version is at https://github.com/troyshu/AngelList.

My first webapp built on a framework: wtfconverter

wtfconverter

www.wtfconverter.appspot.com converts between common units of measurement (e.g. liters, seconds, etc) and silly units (e.g. butts, barns, etc.).

It was the first web application that I had developed using a web framework, in this case the webapp2 framework, on Google App Engine. This was two and a half years ago. Before that, I had developed everything from scratch, using PHP and MySQL for the backend.

This introduction to web frameworks intrigued me, and is what jump-started my journey into Ruby on Rails. Pushing local code to the Google App Engine production server and just having the site work blew my mind. Templating (the GAE tutorial taught how to use jinja2) was like magic, creating and managing dynamic content was so much easier.

I started out by following the GAE Python tutorial word for word, which walked the user through actually building a site. Then I developed my own little webapp that was a little more useful and wasn’t much more complicated than what I had learned in the tutorial. This is exactly how I learned Ruby on Rails too: I walked through the Rails tutorial, building a microblogging app along with the author. Then I built my own web app, Pomos the Pomodoro Technique timer, using what I learned from the tutorial. Pomos has since been deprecated, but here’s a screenshot:

pomos

 

Anyways, I learned a lot from following these tutorials where I actually developed something concrete, and then branching off to do my own thing. This is the heart of experiential learning, and what Sal Khan, founder of Khan Academy, talks about in his book One World Schoolhouse; when the student has ownership of his education by actually applying it, e.g. by building something, he is much more likely to enjoy learning new knowledge and skills. But reforming the current state education is a topic for another post.

My holiday break project: quarterly earnings snapshot webapp

Link: www.qesnapshot.herokuapp.com

qesnapshot

Problem: I just wanted to find out how much a company’s current quarterly earnings grew compared to their earnings for the same quarter last year (called year-over-year). I wanted this info for companies that just released their quarterly earnings recently (e.g. within the past few days), so I could generate new investment ideas. “I see AEHR released earnings recently, on December 23. How did its 2013 Q4 earnings grow from 2012 Q4 earnings?”

There’s no easy way to do this. The current options are:

  1. go to an earnings calendar site like Bloomberg’s, then look up the symbol and find quarterly earnings on a site like Morningstar, calculate the growth % number yourself OR manually find and sift through press releases to find earnings growth %
  2. pay a ton for data that tells you, through an API or web interface that isn’t at all user friendly

Solution: Quarterly Earnings Snapshot is a webapp that scrapes an earnings calendar and then scrapes SEC EDGAR filings for companies’ recently released, and historical, quarterly earnings numbers. It displays earnings per share (EPS) and year-over-year (same quarter) EPS growth in an easy to read format so I can get the relevant numbers I need at a glance.

After being in development for only a couple days, the webapp has already helped me generate new stock investing ideas quickly. For example, a few days ago, i checked the site and saw that KBH (KB Home) had released earnings a week or two ago on Dec 19, and that earnings per share had grown a whopping 671% (see below screenshot).

qesnapshot_example

This prompted me to do more research on KBH, as well as its competitors in the home-building industry, an industry that seems to be rebounding from a bottom. Some homebuilder stocks have already risen a lot, others are still undervalued, and  so present potential investment opportunities.

Feedback and comments are always welcome! I know there are many different features I could add, many different directions i could take this. My short term goal over the holidays was just to build something simple in both design and usage, and to share it.

Thanks for reading. Happy holidays and happy new year!

PS: the site is Ruby on Rails + Heroku. Extremely grateful, rapidly prototyping webapps for free/cheap would not be possible without them.

What I learned from traveling across the world for 7 weeks

Ha Long Bay

Ha Long Bay, Vietnam

Ok so technically I went “around” the world: NY->Vietnam->Cambodia->Thailand->Singapore->Hawaii->NY. But mainly I did my adventuring in Southeast Asia. What did I learn?

  • I dislike being non-”productive”. I didn’t get to work on my programming projects while traveling, and sometimes I wished I had gotten the chance to. I guess more time spent on traveling, self-development, gaining perspective means less time spent for career goals.
  • If you fail to plan, plan to fail. The city planners of Singapore essentially play Sim City and plan every aspect of the city’s development, from zoning to sewage systems, to a T. Singapore is also ridiculously well run and efficient. I believe the latter is a causal effect, to at least a large degree, of the former.
  • Do not control your thoughts and emotions. Become aware of them. The harder you try not to think about something, the more you think about it (study). What matters is not what you’re feeling, but how you feel about what you’re feeling. Awareness of your thoughts and emotions is a powerful ability to have, and is one of the main goals of meditation.
  • You can learn from every situation. My monk instructor in the two-day meditation workshop that I took taught me this too. In the context of meditation, he taught me to not be so hard on myself when I catch my mind wandering during meditation, and to learn from the situation (e.g. what my mind liked to think about, how I felt about what I was thinking about, etc.). I feel it also applies to the greater context of life: we can always learn something about ourselves, other people, or the world in any situation, good or bad, success or failure. Learning, and self-development, is a never ending journey.
  • Appreciate the things we have in life. There are the little things, like drinkable tap water, and air conditioning, but what impacted me most was my experience teaching English in a rural Cambodian village for a week. I met an American philanthropist (http://anywayfoundation.org/) named Ray in Phnom Penh and he invited me to teach for a little bit at an elementary school he had just built. In a place where cassava farms and rubber plantations stretch as far as the eye can see, where electricity is a luxury and daily temperatures rise above 100 degrees F, the kids I taught English to bubbled with enthusiasm to learn. They were so eager to learn, definitely much more so than I was when I was 9 years old, but before Ray donated his time and money, they had no pens and paper, no textbooks, a shortage of teachers, and no school building. Education means so much to them, but they did not even have the means to pursue it. I am truly grateful to have had the opportunities that I’ve had in life so far, for example access to education, and I hope to help those who don’t have them yet experience them.
  • People make the experience. My traveling experience could not have been nearly as fun and educational without the people that I met and befriended from all around the world: other fellow backpackers, the locals (restaurant owners, tuk tuk drivers, hostel staff, etc.), random people on the streets or waiting in line, and of course, this one. Everyone has a unique and interesting story, and one can learn a lot from others.
  • Live life with authenticity. Because in the end, it’s between you and yourself; it was never between you and them anyway. When you are on your death bed, you will judge your own life. Will you judge it based on how well you lived your life the way others wanted you to, or how well you lived your life the way you wanted to? I learned of the following poem from Ray, the American philanthropist who I met in Cambodia:

The Paradoxical Commandments
by Dr. Kent M. Keith

People are often unreasonable, illogical and self centered;
Forgive them anyway.

If you are kind, people may accuse you of selfish, ulterior motives;
Be kind anyway.

If you are successful, you will win some false friends and some true enemies;
Succeed anyway.

If you are honest and frank, people may cheat you;
Be honest and frank anyway.

What you spend years building, someone could destroy overnight;
Build anyway.

If you find serenity and happiness, they may be jealous;
Be happy anyway.

The good you do today, people will often forget tomorrow;
Do good anyway.

Give the world the best you have, and it may never be enough;
Give the world the best you’ve got anyway.

You see, in the final analysis, it is between you and your God;
It was never between you and them anyway.

I hope to travel abroad more. Traveling, and taking the path less traveled, provides something that is easily lost in the hectic and fast paced city that I live in: perspective.

adaptivwealth.com: sign up now for free trade alerts, other features

www.adaptivwealth.com

Sign up now before the month’s end: free monthly trade email alerts, both position entry and position exit reminders, have been implemented. The emails are sent out automatically by the backend a day before entry or exit. Positions are exited on the last trading day of every month; new positions are entered on the first trading day of the new month.

Note: the historical performance results on adaptivwealth are based on using market on close orders, an order type that allows you to buy/sell stocks right as the market closes.

Other features include the ability to view the adaptive Minimum Variance Portfolio’s historical allocations. One can see the benefits of being dynamic (vs. static, such as wealthfront.com or betterment.com) during the last few months of 2007, going into 2008: the MVP during this time period was around 80% in US intermediate term bonds (IEF), which largely protected the portfolio from the precipitous losses experienced by the stock market in the next year.

The MVP vs. VTI performance table (shown below, or when you mouse over the performance time series chart on the main adaptivwealth page) also show the benefits of an adaptive/dynamic allocation model.

mvp_vti_performance

The Minimum Variance Portfolio has a comparable compound annualized growth rate (since June 2006, when the ETFs it uses came online) to that of VTI, the Vanguard Total Stock Market ETF, a proxy for the overall US stock market. The MVP has a much lower maximum drawdown (-16.5% compared to VTI’s -55%), and almost double the Sharpe Ratio (0.62 vs. 0.35): in essence, it seems that the adaptive Minimum Variance Portfolio achieves stock-market like returns over the long-run with much lower volatility than the stock market.