How to Make Tough Decisions Objectively

This week I had a really hard choice between two summer internship offers. One was from Google and the other was from a mid-sized company (~100 employees) that I’ve used a lot in the last couple years. It’s one of those situations where you drift back and forth in your mind, coming up with a reason to choose A then thinking “well, but B could be better because…” and vice versa. Fortunately, someone once taught me a really valuable approach to making tough decisions: Decision Sheets.

Pros and Cons

Everyone who gets in these situations and is vocal about the agony they’re going through is inevitably told to make a pros and cons list. We’ll start there and then turn that into a more principled approach later.

Here’s the criteria that I would write down on a pros and cons list for a PhD student choosing a summer internship:

  • Location/commute
  • Team size
  • Amenities
  • Compensation
  • Company size
  • Research relevance
  • Networking
  • Prestige
  • Publishing potential
  • Impact on company
  • Knowledge gain
  • Work content
  • Impact on society
  • Manager compatibility
  • Project flexibility
  • Team

Now, the traditional pros and cons list would simply have checks for the good things and minuses for the bad, then you add up and get the result. Of course this makes no sense, since it’s weighting things like knowledge gain and amenities equally, when they’re certainly not.

Decision Sheets

A decision sheet enables you to hierarchically weight different criteria in an organized fashion. The result is a single, objective score in the range of 0-10.

Hierarchical organization

The first step is to group all of your criteria into some high-level categories. Note that you don’t need to do this if you only have a handful of criteria. However, when you have a long list it’s helpful to simplify things as much as possible to avoid overweighting certain criteria that may have more fine-grained criteria.

For my internship, I organized the criteria into three categories:

Quality of Life

  • Location/commute
  • Team size
  • Amenities
  • Compensation
  • Company size

Professional Advancement

  • Research relevance
  • Networking
  • Prestige
  • Publishing potential
  • Impact on company
  • Safety

Personal Satisfaction

  • Knowledge gain
  • Work content
  • Impact on society
  • Manager compatibility
  • Project flexibility
  • Team
  • Safety

Note that I also added the Safety criteria to the latter two categories. This is meant to account for the fact that I’m unsure of the accuracy of my estimations. What is the risk that I’m going to have a horribly unsatisfying project or that I will not really get much out of this internship in terms of profession advancement? The more certain I am, the higher the score for Safety.

Once you have the categories established, you can assign weights to both the categories and the criteria.

Weighting categories and criteria

Each category and criteria gets a weight of 1-10. These weightings are relative to other values at the same level. For instance, quality of life is not nearly as important to me as professional advancement, and both are much lower than personal satisfaction.

The criteria will affect the overall score of their category, which will then influence the final overall score.

Scoring each criteria

For each low-level criteria, you score the different choices on a score of 0-10. For instance, Google has terrific amenities, so they got a 10, where as the smaller company has to be more economical and only gets a 5. Conversely, the ads group is the goose that lays the golden egg for Google, so they only get a 3 for publication potential– I may come up with an idea that I can later publish, but I’ll have to reimplement everything and use non-proprietary code and data; the smaller company has people actively publishing research based on their users, so they get a 9.

The final weights and scores I assigned are as follows:

Category Weight Other Company Google
Quality of life 7
Location/commute 8 3 9
Team size 5 10 7
Amenities 5 5 10
Compensation 9 8 8
Company size 4 7 3
Professional advancement 8
Research relevance 9 6 8
Networking 8 8 10
Prestige 7 6 10
Publish potential 7 9 3
Impact on company 8 9 7
Safety 8 6 9
Personal satisfaction 10
Knowledge gain 10 8 9
Work content 10 9 10
Impact on society 10 6 5
Manager compatibility 5 9 7
Project Flexibility 7 10 8
Team 7 10 9
Safety 8 8 10

Calculating the final decision score

Once you have all the rankings done, you can calculate the final score by doing a weighted average of the criteria to get the category scores, and then doing a weighted average of the categories to get an overall score. By that, I mean you multiply the weight of a criteria times the score you gave an option for that criteria. You sum all of the weighted criteria scores in a given category and divide by the sum of all the criteria weights to get a normalized (0-10) score for the category. Then finally you multiply the category score times the category weight, add up all the weighted category scores, and divide by the sum of the category weights to get a normalized overall decision score in the range of 0-10 for each option.

My personal overall result: 7.49 vs. 8.02– I am going to Google this summer! Feel free to look at the spreadsheet that calculates everything.

Note: do not put the results on the same page as the scores and do not look at the results until you decide you are happy with the scores. The idea is that, no matter what the result, you are going to stick to it. If you can see the results as you score the options, you will bias yourself unconsciously. Instead, put the results on a separate page, like I did in the above spreadsheet.

Conclusion

Some decisions are going to be hard to swallow no matter which way you go. The beauty of this approach is that you decouple your value system from your decision by first figuring out what’s important to you via the categories and weights. It also prevents you from biasing the scores one way or another because there are typically so many criteria that you can’t tell just by looking at the scores which answer is currently ahead. In the end, the decision will still be hard to execute, but at least you can feel confident that you thought it through objectively and in a principled manner.

If you enjoyed this article, please upvote it on Hacker News

The ACM may be Violoating the CAN-SPAM Act

Not only is the ACM potentially violating the CAN-SPAM Act of 2003, but it’s egregiously doing so by failing several provisions. The provisions are pretty clear:

You can’t charge a fee, require the recipient to give
you any personally identifying information beyond an
email address, or make the recipient take any step
other than sending a reply email or visiting a single
page on an Internet website as a condition for honoring
an opt-out request.

Here is a snapshot of the bottom of an email that the ACM sends me frequently.

The ACM's email unsubscribe section

Here is what’s illegal about this:

  • They are requiring me to follow a different route based on whether I’m an ACM user or not.

  • For ACM users, they require me to log in, which means providing personally identifiable information.

  • They also require me to go through multiple pages to unsubscribe.

But wait, it gets better! Even if you unsubscribe, you then get an unsubscribe email sent to you with a confirmation link:

The ACM's confirmation email they send when you unsubscribe

This is also illegal. And to top it off, none of this even works. I’ve unsubscribed from the ACM lists multiple times and they continue to send me the same newsletters– also illegal!

Conclusion

The Association for Computing Machinery (ACM) is the professional organization for all IT professionals and computational scientists. They are potentially guilty of, by my assessment, five counts of illegally spamming users. I emailed the ACM several days ago about this issue and heard nothing at all from them. Maybe publicly shaming them will work.

If you liked this article, please upvote it on Hacker News.

What a week running a startup looks like

Startups are a roller coaster. Everyone says that, but on HN all you generally see are big success stories and the occasional shutting-down story that is light on details. I want to give you a little glimpse at what life can really be like running a startup.

The following events happened to me within a single week last summer while running my startup Curvio, a site that finds fashion items from TV shows. I didn’t record the days of each event, just the approximate order.

  1. YAY! CNBC and Y! Finance articles. Two articles come out that did a profile piece on the site and me personally. Traffic surges about 8x.

  2. WTF! Google organic traffic plunges 50% inexplicably. At this point, about 95% of our traffic is derived from organic Google search traffic.

  3. Sigh… No feedback from a huge email list of industry contacts. Having created a product demo video for some new features, we requested feedback from our business contacts. No one has replied.

  4. Argh! Family drama. Someone is getting divorced. Long phone calls ensue.

  5. Screw it. Company is shutting down. We are losing about $1500 of our own money every month. We can’t seem to get growth and I am not very motivated anymore. My co-founder has also just gotten a new job in NYC at SideTour and his love for Curvio is waning.

  6. Allons-y! Company reborn at the last second. We decide we can’t let the site go, but we need to make drastic changes. We devise a plan to shutter 90% of costs and push more monetization.

  7. Ugh. C&D letter for trademark infringement. A competitor sends a Cease and Desist letter about our tagline infringing on their trademark. A few months ago when we launched, they had only used it in their footer, so we never saw it. They have since launched a redesign with it featured prominently. We brainstorm up a new (better, IMO) tagline.

  8. :( Drastic cutbacks. We have an entire team for both snapshots and shopping content. Unfortunately, I now have to abruptly end contracts for 9 people and slash hours for others.

  9. Ouch. Family illness. Someone has a terminal illness. Long phone calls and tears ensue.

  10. OMG! AWS down, during a deep Googlebot crawl. A ton of new content is being indexed when AWS dies. Since we are tracking shows as they come out, being indexed efficiently is crucial for us.

  11. $$$ Adbrite added to the site. As part of our increased focused on monetization, we apply for an Adbrite account and start to incorporate some banner ads into the site.

  12. $$$ Adbrite account rejected. No real reason, just rejected. We have no idea why.

  13. YES! Several brands sign up for our new platform. The previous week we introduced a feature where brands can sign up for a special account that allows them to add their own products directly to our site. A number of brands see the profile article on CNBC and reach out. We successfully sign up 5 brands for beta accounts.

  14. NO! Several days go by without any brand using the platform. Everyone who signed up and sounded super excited just never adds anything. We talk with them and they basically say they are just too busy. Side note: over the coming weeks we tried lots of things and we just couldn’t find a way to get them to work with us, forcing us to abandon the platform.

  15. STOPPPP! Tons of our pages are dead ends. Due to a bug, 20% of our content is 404’ing for a few days. Great way to kill your user base.

  16. Whew! Adbrite account manually approved. We finally get someone at customer service to override the auto-reject we got.

  17. Seriously?! AWS down (again). Just when we are getting a little traffic clawing back from the buggy 404s and mysterious Google referral drop, AWS dies again.

This was a crazy week, but only because everything happened in such short intervals. The swings never stop. Adbrite recently decided to close, forcing us to find a new ad network. AWS has gone down lots of times since then. We gave up again, stopped producing content, and then three weeks later our CNBC article was picked up and put on the front page of Yahoo!, driving 500k pageviews in 24 hours. The list goes on and on…

The point is that nothing in startup life is as simple or one-sided as it may seem when you read an HN or TC article. It’s not all “we had success after success” nor is it “we tried everything and it just wasn’t working.” Stick with it through the dips and you just might find a sustainable business model.

If you liked this article, please upvote it on Hacker News.

Retraining Baby Boomers to be Programmers in 6 Months

Today’s job market is different than what the majority of the baby boomers have experience in. Retail is dying and the few positions that are available are highly competitive. I know a couple of boomers in the central Virginia area who are looking for 2nd careers. So, with their savings depleted due to prolonged unemployment, I proposed a radical idea: become professional programmers by June 2013.

If you’re over 45 and want to become a developer as well, email me. I’m happy to include you in the project.

Foundational Retraining

They have no technical background, no education beyond high school, and absolutely no experience with programming. They do have a desire to learn to code, get a decent paying job, and work for an employer who cares about them.

Putting MOOCs to the Test

The last year has seen a surge in Massively Online Open Courses (MOOCs). Tons of articles have been written about how MOOCs may enable the stagnant economy to adapt via retraining of the unemployed towards more tech-focused careers. I’m going to test that theory: over the next 6 months, they are going to use 100% free online learning courses to become professional programmers.

The Curriculum

I’ve designed a 6-month program, available via a public Google calendar. The courses in the program are:

  1. Touch Typing (TypingWeb) – A basic typing class. Productivity gains aside, looking away from the screen to see what you’re typing causes a disruption in your concentration. Consequently, I think touch typing will make you a better programmer. 30 minutes a day for 9 weeks, starting February 4th.

  2. Intro Python (Codecademy) – The ground floor for learning what programming looks and feels like. I love the in-browser coding tutorials and personally think they are a great way to dip your feet into the water. 6 weeks worth of classes, starting February 4th, though I expect they will finish this much sooner. Supplementary material available via the Coursera course on Learning to Program.

  3. MIT’s CS 6.00x (EdX) – A comprehensive intro to Computer Science and programming. The course covers everything from OOP to MC sampling, with a bonus reward of an official MITx certificate of completion. 24 weeks, starting February 4th,.

  4. Princeton’s Algorithms, Part I (Coursera) – The course will cover a lot of fundamental data structures and algorithms that will be brought up in most programming interviews. 6 weeks, starting February 4th.

  5. Learn to Program: Crafting Quality Code (Coursera) – A gentle introduction to testing and debugging. 5 weeks, starting March 25th.

  6. Web Fundamentals (Codecademy) – Learning the basics of HTML and CSS is a must these days. 3 weeks, starting March 25th.

  7. Intro Javascript (Codecademy) – Learning JS is a prerequisite for most web development jobs, so this is a must as well. Fortunately, once you know Python, this should be easy. 3 weeks, starting March 19th.

  8. Startup Engineering (Coursera) – Hopefully this will bridge the gap between the basic courses and modern web and mobile development. They will build a complex product with a team, giving them a cool project to discuss in job interviews. 10 weeks, starting April 2013. Since I’m a little leery of the start date being pushed back, I have the fallback course of Steve Huffman’s Web Development (Udacity).

  9. Independent Projects (Github) – Every week they will write and push one open source project to Github. The idea is to build a portfolio of increasingly complex examples of their coding ability. 24 weeks, starting February 4th.

  10. Weekly video chats – One of my professors has a great class discussions structure. Every morning, he sits down with the class and starts by saying “Good morning colleagues. Are there any questions?” I plan to sit down with them and ask them that same question every Friday. I’ll try to be helping throughout the week, but this structured time ensures I’m available for in-depth questions before their weekly assignments are due. 24 weeks, starting February 4th.

  11. Job search – The course goes through June, but they will start applying for jobs in April. Worst case scenario is they get no interviews or responses. If they do get interviews, it will either A) lead to a job (yay!) or B) be excellent practice for the next interview. 10 weeks, starting April 15th.

Challenges

This is not an easy task.

The time commitment is around 40-50 hours a week. It requires becoming a full time student.

In terms of conceptual challenges, Algorithms is by far the hardest course. It also requires them to do their work in Java instead of Python. I’m not sure how this will work out just yet; I will probably have them do the algorithms in Python and then help translate them to Java.

After mid-April, the schedule starts to de-emphasize classes. This is intentional. I want them to start working more on projects, maybe learning something on their own like Flask, Backbone.js, or Android. By this time, they should have a good feel for what they want to specialize in, whether it be back-end, front-end, or even mobile development.

Once they have the skills, getting the job will mean overcoming both the lack of a formal degree and the alleged age bias in tech. I always found the “hire the hot young kid” perspective naive. Yes, that kid is probably going to become a great programmer in his life. How long do you think he’ll stick around at your company? 2 years? Maybe 3? Conversely, they are ready to dedicate the next decade to a company that values them. Still, the bias probably exists and they’ll have to convince their potential employer of the long-term value they can add.

Conclusion

This is my first-shot at a curriculum and I’m interested in hearing thoughts from other people:

  • What do you think about the courses they’re taking?
  • Is there another class or program they should take?
  • Is there a better way to go?
  • Would somewhere be willing to train them on the job?
  • Is there a dominant technology in the Richmond area they should learn?
  • What about working from home?
  • Should they focus more on mobile than web?

Note that all of the courses I outlined are 100% free and available online. That’s important, since they are not able to relocate and up-front tuition is out of their price range.

As far as I’m aware, this will be the first time anyone has ever gone from zero background knowledge to professional developer in 6 months using only free online courses. It’s a huge challenge. I’m confident they can do it.

If you’d like to retrain also, email me.

How To Find Startup Ideas

I recently have met a number of people who expressed how badly they wanted to do a startup but said they lacked any good ideas. I know that startup ideas are worthless, especially since I have lived through the dozens of iterations involved, first with EffectCheck and now with Curvio. Nevertheless, you need to start somewhere and that means you need an idea that sufficiently captivates you. Now, I could simply give these people a list of startup ideas, but for an idea to really stick in your mind enough that you’ll want to start a company around it, you need to come up with it yourself.

 

My Strategies

I’ve come up with a brief collection of strategies that you can use to generate new ideas for startups:

Repurpose

Take a service or approach applied to one market, and apply it to another.
Examples: Chill (Turntable.fm), Yammer (social networks for businesses)

Digitize

Take content or functionality that exists only in a legacy form and put it online or in an app.
Examples: Dr. Chrono (medical records), Google Books

Automate

Take a task that seems tedious and currently requires humans and automate it away.
Examples: Google (search rankings), EffectCheck (emotional impact analysis)

Unify

Create a common platform that ties together proprietary solutions or providers.
Examples: Twilio (abstracts away carrier-specific APIs), Greplin (single search engine for lots of services)

Componentize

Take a piece of functionality that people currently implement themselves and make it a reusable component.
Examples: Apigee (APIs), Get Satisfaction (support forums)

Connect

Transform a situation where people are isolated or lonely by connecting them in a novel way.
Examples: Facebook, Meetup, LetsLunch

Catalyze

Encourage people in a community to generate data that would otherwise be less structured or available.
Examples: StackOverflow (programming Q/A), reddit (social news), Curvio (IMDB for products and apparel)

 

Applying the Strategies

One important thing to remember is that these are not meant to be options that you choose at the start. Rather, consider each of these strategies to be a background process that runs continuously in your mind. Every time you encounter a problem, if it may be solvable by one of these strategies, that’s a potential startup idea!

When you have such an idea, write it down. It doesn’t have to scale or be clear how you’ll monetize, it’s just important that you finish the thought. I typically send myself an email with the subject prefix “Startup Idea: ” and a brief synopsis of the idea. This process helps ensure your mind offloads the mental weight of the idea so it can move on, either to generating the next idea or exploring the current one further.

Also, don’t feel that these are discrete categories of startups. Most startups have some element of more than one strategy. For instance, I listed my startup Curvio in Catalzye, but it also has elements of Digitize, Repurpose, and Connect. The strategies are just there to give you a foothold to begin thinking about how to discover and attack a problem.

 

Conclusion

Hopefully after reading this, those of you with “startup block” may find some inspiration. Remember, though, the idea is just the very start. Each idea you have will likely be twisted, contorted, and maybe even discarded once you start gathering user metrics and getting customer feedback. So don’t over-analyze it: take the little idea you generated and just do it. If you need help launching your minimum viable product, here’s a list of tools I found helpful the first time. You’ll soon discover that finding and building your idea was the easy part.

Cold Contacting vs. Spamming

By sheer chance, I received two solicitation emails this week. In both cases, I didn’t know the sender, I didn’t request information from them, and they are clearly trying to sell me their products. The approaches, however, were very different and as a result I would label one as a legitimate cold call via email, where as the other is just basically spam to me.

 
 
 
Continue reading

The Startup Dragon

Yesterday I received a survey request from Lean Launch Lab. I didn’t bother to answer, and quite frankly I stopped using the tool about a month after signing up. The whole “lean startup” movement is interesting and I appreciate the idea behind LLL. They want to make building a startup easier by enabling entrepreneurs to better organize what they’ve learned, what they’re working on, and what their next steps will be. That’s all great, but there’s just one thing that startups in this field seem to forget: I’M BEING CHASED BY A GIANT FIRE-BREATHING DRAGON.


Continue reading

The 10 Greatest Hacks of My Life

My co-founder and I briefly considered applying to YCombinator for the Winter 2012 session. We eventually decided to bootstrap Curvio initially, and raise a seed round on our own after we launch (so far so good!). But looking over the YC application, one question intrigued me:

Please tell us about the time you, tansey, most successfully hacked some (non-computer) system to your advantage.

Now, there are a lot of ways to interpret this. A mechanical interpretation would be about how you used some physical object in an extraordinary way to solve a challenge. Shifting to a more human-focused interpretation, maybe it’s about how you navigated your way through some social hierarchy or organization, breaking down walls that should have kept you out. From a business perspective, it may be about making a market when you saw an opportunity that no one else did. One friend even referenced having a surgery that left him paralyzed and having to hack his own mind via Neuro-Linguistic Programming to learn to walk again– the possibilities are endless!

This all got me to thinking: what are the greatest hacks I’ve ever done? Computer and non-computer systems. So here they are, in chronological order, the 10 greatest hacks of my life. Continue reading

Machine Learning as Art

I watched a very interesting Ted Talk today by Paul Bloom. In it, he touches on the fact that pleasure is directly tied to our knowledge of the history of events leading to the moment in question. For instance, we view an original work of art much higher than a forgery even though the forgery is nearly identical. The reason for the discrepancy is that the original artwork is connected to a history that involves a strongly creative act. This had me thinking about why I love machine learning so much.

 

 

Continue reading

What Would an Investment Banker See in BART?

If an investment banker were to look at the Bay Area Rapid Transit (BART) system, what opportunities might he see?

One thing he might notice is an excellent arbitrage opportunity. Each ticket is priced according to the distance you travel. If he setup a secondary market for tickets, travelers could purchase a one-stop ticket for only $1.75, board a train to their true destination, and upon arrival they would exchange tickets with another passenger who was heading in the opposite direction, paying us a small fee of $0.25 for facilitating the transaction. If there’s no matching passenger, the user pays an exit fare (at no extra penalty) and is finished.

Now, the banker sees this as a win-win. The two customers receive cheaper tickets and he gets paid for making it possible. The banker has provided essential liquidity to this secondary market, leading to better prices and a more efficient market. It’s a free lunch! Continue reading