The sky is not falling

I am writing to share some reactions to Claire Cain Miller’s piece in the New York Times, “Silicon Valley Booms but Worries About a New Bust.”

I met Claire at the Founder Showcase event she mentions in her article and thought her to be an inquisitive and thoughtful person.

I have four primary reactions:

  • I do not believe it is “easy to come by” money in Silicon Valley.
  • I do not believe startups are wasting money on “lavishly” decorated and “holier than thou” offices.
  • I believe we are seeing a new generation of smarter, more efficient startups.
  • I was quoted out of context.

I do not believe it is “easy to come by” money in Silicon Valley.

Claire writes, “… for anyone with a decent idea and the drive to start a company, $100,000 to get it off the ground is easy to come by.”

I have direct experience fundraising within the time period this article covers, having helped Cabulous present to raise over $500k and fundraising for the company I co-founded, VidCaster. My 50+ fellow peers in the highly competitive 500 Startups accelerator program have direct experience fundraising right at this moment. My wider network of peers includes those in programs such as Y Combinator, TechStars and of course those entrepreneurs branching out without an accelerator behind their back.

None of these entrepreneurs would ever say $100,000 is easy to come by.

All 100+ investors I have met with while fundraising for VidCaster and Cabulous, whether angel, “super-angel” or VC, are cautious, thoughtful and thorough in the examination of any investment.

Most notable is the attention toward solid and sustainable revenue. We did not pursue funding for VidCaster until we were absolutely sure that our business had created a scalable and sustainable revenue stream, proven simply by looking at our books.

Companies that raise funding from investors whom I encounter are almost universally deserving of capital to expand what is already a successful business.

I do not believe startups are wasting money on offices.

Even as we approach levels of tech sector employment not seen since the late 90′s, use of space is extremely efficient — twice as efficient to be exact.

SFGate article from earlier this year:

“…as tech jobs have multiplied, their real estate footprint has fallen. Where tech companies occupied 18.3 percent of San Francisco office space in 2000, they occupy just 9.3 percent today, according to Yasukochi, who based his estimates on data from the California Economic Development Department, Moody’s Economy.com and his firm.

That’s one reason so many offices in San Francisco remain vacant. At the end of 2010, 17.1 percent of the city’s office space sat vacant, according to Jones Lang LaSalle, up from 14.7 percent in the first quarter of 2009.”

Fellow entrepreneurs I know shy away from investing in traditional, lavish office spaces reminiscent of the 90′s. In fact, most startup companies growing today look to share space in San Francisco or the Peninsula with other software companies doing similar work. I have been a longtime member of Parisoma co-working space in San Francisco and as our company grows we are partnering with other startups to lease shared facilities in San Francisco.

I believe we are seeing a new generation of smarter, more efficient startups.

In San Francisco and Silicon Valley we are witnessing a slow motion revolution in the way that companies are formed and ideas are monetized.

The next generation of startups focus on functional products that earn revenue. They reach a point of significant recurring revenue before seeking funding. They are conservative with cash and go to great lengths to minimize expenditures, especially those “legacy” expenditures from the previous generation of startups such as lavish offices or physical server infrastructure.

In fact, I went so far as to remind Claire during all of our email communications of my core belief that this next generation of startups is very different.

A quote from a recent email exchange with Claire yesterday afternoon:

I’ll share again since it’s a strong belief of mine: I think our startup (VidCaster) is a great example of what I believe to be a wider trend in this generation of startups — focusing on a product that earns real revenue, pursuing funding only when the company is showing real traction.

I am disappointed to have been quoted out of context in this excerpt from the article:

Soon came VidCaster, a service for Web sites to add video; it was started by Kieran Farr, a taxi driver turned chief executive. He said his service had absolute stickiness — meaning that it lures Internet users to stick around for a long time.

“What’s the gross margin of the business look like?” asked George Zachary of Charles River Ventures.

“What does that mean?” Mr. Farr said.

“That’s a problem.”

Unfortunately, this is where the article stops quoting.

I’ll admit I was taken aback by George’s question, but I wasn’t the only one — other audience members told me they were confused why he asked this as well.

To understand why, here’s a quick bit of accounting background: gross margin for software-as-a-service companies is an irrelevant metric, it approaches 100% if we are doing our job right and running a functional software business.

George asked this question because he thought we were a service business in video production — an industry where margins are closely monitored — which our slides and my verbal presentation clearly stated we were not. He later apologized for his misunderstanding and ended up giving VidCaster the highest score of the panel.

I respect Claire, her writing and her intent to provide a behind-the-scenes look at one of the only bright lights in our nation’s economy, however I do not agree with the perception that the sky is falling over Silicon Valley.

Posted in econ, internets, media, tech, work | Tagged , , , , , , , , , , , , , | 4 Comments

One thing that you will learn quickly is that a computer is very dumb. It does exactly what you tell it to do, which is not necessarily what you wanted.

—Introduction to Computer Programming from Berkeley Foundation for Opportunities in Information Technology from here

Posted in Uncategorized | Leave a comment

Emergency!

Working taxi dispatch phones, I received a call around 1am from a group of loud women.

“We have an emergency, we need a taxi immediately.” (Loud yelling in the background.)
“What’s going on? Is anybody injured?”
“No, nobody is injured. We need a taxi right now, we’re at Geary and Gough.”
“What’s the emergency?”
“We were just thrown out of our taxi here in the middle of nowhere. We’re 3 girls all alone and we need a taxi now.”
“At Geary and Gough. Okay we’ll call a pickup there.”

They’ve already been thrown out once. I doubt any of our drivers would want to pickup that order.

Posted in taxi | Leave a comment

Woman in Tears

I worked taxi dispatch phones Friday night, answering hundreds of calls from people looking for a cab all across the City during the busiest time of the week.

A woman had called around 10pm for a cab from the Richmond district, let’s say 20th Avenue and Clement. She sounded like she had finished a long day at work and just wanted to get home, or so I invented in my head.

She patiently called back every 15 minutes or so until around 10:50pm when she called back in tears. Just before her call, a cab in our fleet finally responded to her order and, as luck would have it, arrived near the same time as a Yellow cab. She had called Yellow about 20 minutes earlier, understandably frustrated from waiting so long and wanting to try another option.

Also understandably, both cabbies are pissed off. It’s a busy night. Drivers can make a lot of money during this time period. Chasing orders for no gain is a waste of everyone’s time.

What do cabbies do when both arrive at an order? Some cabbies see it as part of the “taxi code” to both leave the order to punish the customer for calling two companies. I’ll usually defer to the other driver as I’m non-confrontational. Some cabbies choose to engage in verbal or physical altercations.

In this case both cabbies took off, leaving our poor protagonist in tears and still without a way to get home nearly an hour after her initial call.

Please note this is not meant to be a criticism of any cab company, drivers, customers, or even traditional radio dispatch, simply an example of service failure due to extremely excessive demand for a City administered transportation service.

The staff of the SFMTA Division of Taxi and Accessible Services is fully aware of these issues and we can hope that they are working to act in the near future on peak medallion permitting and layered dispatch.

Posted in politics, taxi, transit | 3 Comments

Python Multithreaded S3 Bucket-to-Bucket Copy (on Amazon Web Services)

For both backup and staging purposes, we regularly need to backup an entire S3 bucket to another bucket. AWS has no built-in function to do this, nor does the boto Python library.

We started off with a simple for key in bucket.list() and copied the files one by one in sequence with key.copy(dest_bucket, key_name). This is imperfect for a few reasons:

  • There are many files, and the files are very large. Processing one by one takes a long time. Sometimes we need a copy asap.
  • AWS is designed to fail. Applications built on AWS should be developed to handle failures. With the sequential design, if any one of the key copy requests fails, for any reason, it will interrupt the rest of the process.

This seems like a perfect problem for threading, and I have been looking for an excuse to play with Python’s built-in threading features. This also seems like a perfect chance to try hosting an open source project on GitHub, also a first for me.

Issues:
- Does not set ACL. I assume this is set to bucket default.
- Timeout is clumsy, results in multiple 30 second delays. Instead, should log error/timeouts and retry x times.

Performance:
- 52GB / 7 minutes = 52,000MB / 420 Seconds = 123.8 MB/sec

With tweaks to timeout and error handling, this can be significantly improved. Curious to hear other people’s experiences too.

Try it out!

Posted in internets, work | Leave a comment

Take Me to Chinatown

I drove Thursday this week, a day after the SF Giant’s World Series Parade attracted record crowds.

The morning was spent driving to and from the airport — I had 4 trips to SFO before noon.

In the afternoon I picked up an impeccably dressed middle-aged guy near Levi’s Plaza. He wore bright white pinstripe pants with a colorful bow-tie, his hair was perfectly gelled on top of a chiseled face.

- “Where are you headed today?” I asked.
- “Take me to Chinatown,” he replied. “I’d like to get some presents for the kids.”
- “Where are you in from?”
- “North Carolina.”
- “Oh I think I was there once for spring break with the family. There’s water near there right?” I can be a real idiot with smalltalk sometimes.
- “Yes, North Carolina is adjacent to the ocean.”

Redirecting the conversation, “Where in Chinatown do you want to go?”
- “Somewhere near the shops with all the knockoff purses and stuff,” he said. I wondered, would he tell the kids that they were knockoffs? Maybe they specifically requested, Dad get us the $10 coach bag!
- “Okay I’ll take you to the entrance close to Union Square so you’re oriented.”

A quick trip up Pine Street had us quickly approaching Grant Ave when he says, “Wait, no this isn’t it I want the other Chinatown.”

- “The other Chinatown?”
- “Yeah the one right across from the water with all the purses and stuff.”
- “Sir, this is Chinatown. ‘Shops across from the water’, sounds like you might mean the Fisherman’s Wharf?”
- “I guess, but there’s all these Chinese shops with cheap purse knockoffs and stuff.”
- “Yeah, I think you’re referring to the Fisherman’s Wharf near the piers. There are a lot of Chinese people that own or work at those shops. There’s a lot of Chinese people here in general.”
- “Oh. That’s probably it.”

Posted in taxi, work | 1 Comment

Avenue Street

I answered a lot of phone calls last night at the taxi company.

Around 3am a girl called demanding a cab at “320 Avenue.”

That didn’t make any sense. “320 Avenue? That doesn’t make any sense. What’s the street name?”
- “Avenue.”
- “Which avenue? Like 3rd Avenue, 4th Avenue?”
- “Avenue!!! Avenue Street!”
- “What city are you in?”
- “San Francisco, duh…” in a perfect valley girl accent.
- “There is no street called ‘avenue’. Are you on 20th Avenue? Maybe 3rd Avenue? What’s your address?”
- “It’s 320 on Avenue Street!”
- “Avenue Street?”
- “Yeah Avenue Street! 320 Avenue!”
- “Maam, there is no street named ‘avenue’ in San Francisco. Can you call back with your real address?”

She called back 3 or 4 times in the next hour, always very frustrated and presumably thinking I was part of some conspiracy meant to silence the existence of Avenue Street in San Francisco.

Posted in taxi, work | Tagged | 1 Comment

Fetch OAuth Authenticated YouTube API Version 2.0 Requests with GData-Python-Client, Including Insight

We’ve been using Google’s GData-Python-Client library to connect our VidCaster client accounts to YouTube, which allows for neat operations like importing* and exporting of video.

A key component of VidCaster is to provide simple aggregated video analytics to our users, which means we need to import YouTube Insight data.

The general YouTube 2.0 API supports downloading of this Insight data if the request is authenticated on the behalf of the user that owns this video. Per the documentation, you can obtain a link to a CSV video analytics report for an individual clip by requesting a video entry while authenticated on behalf of the user. In Google’s words:

A video entry contains a link to an Insight data feed if the authenticated user retrieving the entry owns the video.

Unfortunately, this is a GData 2.0 API call and the current Python-GData-Client library only supports 1.0 API calls for YouTube, through the deprecated service class, instead of the 2.0 API client class.

The question: How to access this YouTube 2.0 API data using the current version of the GData-Python-Client library? We’ve already gone through the trouble of integrating OAuth for our users, and we’d rather not write a full OAuth query implementation, nor rewrite the GData-Python-Client library.

The answer: We can use a rather generic authenticated 2.0 request to fetch raw queries and process the XML response ourselves.

While we can’t use the developer-friendly feed-specific queries like yt_service.GetYouTubeVideoFeed() from the 1.0 API, we can still make the request and retrieve a response while authenticated which allows us to get the valuable Insight data.

Below is the basic code, note that you’ll have to implement OAuth before using this solution:

import gdata.gauth
import gdata.youtube.client
import gdata.youtube.service
from gdata.gauth import OAuthHmacToken

# Our code to fetch site settings and individual OAuth credentials
from django.conf import settings
from myproject.credentials.models import Credential

CONSUMER_KEY = settings.GOOGLE_CONSUMER_KEY
CONSUMER_SECRET = settings.GOOGLE_CONSUMER_SECRET
YOUTUBE_DEVELOPER_KEY = settings.YOUTUBE_DEVELOPER_KEY
SCOPES = ['http://gdata.youtube.com']

# Fetch token and token_secret per your existing OAuth implementation
credential = Credential.objects.get(pk=1)
token = credential.token
token_secret = credential.token_secret

yt_service = gdata.youtube.client.YouTubeClient(source='MyCompany-MyApp-v1')
yt_service.developer_key = YOUTUBE_DEVELOPER_KEY

oauth_token = OAuthHmacToken(consumer_key=CONSUMER_KEY, consumer_secret=CONSUMER_SECRET, token=token, token_secret=token_secret, auth_state=gdata.gauth.ACCESS_TOKEN)

feed = yt_service.get_feed(uri="http://gdata.youtube.com/feeds/api/users/default/uploads/?v=2", auth_token=oauth_token)

# Great, now you have a feed that includes links to the Insight CSV files!
# I'll leave pagination and parsing XML as an exercise for the reader.

Goods:

  • It works.
  • No modification of existing gdata-python-client library needed, also saves you from needing to write a raw oauth signed query to obtain this data.

Bads:

  • Returns raw XML response, you’ll have to parse this yourself.
  • Not a standard way of implementing a signed OAuth request in V2.0, these functions are normally performed by fancy client class methods on your behalf.
  • In theory this code shouldn’t break even with future releases, but there will be a better way of performing this request when the gdata-python-client maintainer(s) update the library.
  • Very frustrating: The Insight data returned in these CSV files only has the last 7-days of statistics for a given video. This is an artificial limitation enforced by their proprietary security token passed in the generated link. There’s a bit of discussion about this limitation here. Take a second and “star” the feature request to unlock this additional data.

*Downloading videos from YouTube is not officially supported in the API. Youtube-dl.py is the best solution I’ve found as a workaround. It’s well maintained and Python based.

Posted in tech, work | Tagged , , , , , , , , , , , , , , , , , , | Leave a comment

SFMTA Taxi Medallion Sales Pilot Program


(PDF Link)

I’m returning from my blogging hiatus at an amazingly unique time in the history of San Francisco taxi regulation. In the past I’ve written extensively about the San Francisco medallion system and other regulations, including:

Thanks to a combination of forces the SFMTA has acted extremely quickly to create a pilot program with a view toward migrating the City to a transferable medallion scheme. A full writeup will have to wait, but for now here’s a scan of the form that the SFMTA is sending out to drivers to gauge interest in taxi medallion buyers and sellers.

Link:

Posted in econ, politics, taxi | Tagged , , , , , , , , , , , , , , | 1 Comment

Driving April 22

It’s time to try this blogging thing again.

Yesterday I drove a normal “extra” day shift from 7a-5p. Some notes:

  • I drove my favorite taxicab: the Toyota Camry Hybrid. Ample space, great handling, adequate (but not stellar) gas mileage, smooth ride, good stereo and accessories, nice pickup.
  • I thought I would tire of cab driving after a year, but I still enjoy it. Approaching my third year. Scary! Admittedly, it is much more fun to drive just 1 or 2 days a week. When I drove 3+ per week it felt like a job.
  • Thursday was a very busy day, owing in part to a fatal Muni accident which shut down all inbound/outbound Muni Metro service for a significant portion of the day.

    However, both as a dispatch order taker and as a driver I notice a significant improvement in demand for taxicabs (and thus earnings) compared to last year. Last winter was the toughest I ever experienced driving a cab, when $150 take-home seemed like an amazing accomplishment. (My all-time average prior was $170 per shift, so a peak of $150 per shift is extremely scary.)

    In the mornings in the dispatch office we notice significantly higher numbers of airport advances and generally higher numbers of inbound calls. On the street I’m again finding hails in unpredictable areas, a fun sign of increased demand.

    It is fascinating to directly experience fluctuation in demand for a service I provide that so closely parallels the greater economy.

  • I had an amazing nonstop pickup streak yesterday. As a day driver, it’s tough for me to encounter this regularly, but some night drivers (especially on weekends) are very familiar with this feeling: when you drop and have an immediate or near-immediate followup fare it’s like a drug.

    Here’s mine:

    • Picked up a radio call at the St Francis hospital. An older woman got in my cab and we headed out to her home in the Inner Sunset. We spoke at length about her ailment, apparently some sort of muscle related pain in her legs. She’s going through physical therapy at the St Francis.

      I love the drive from St Francis hospital to the Sunset district. That’s fortunate for me, as countless elderly ladies seem to regularly commute to and from the St Francis hospital and the Sunset. They should have just put the St Francis in the Sunset.

      Depending on the traffic I’ll head down Hyde, out Turk to Masonic, out Masonic to Lincoln to 7th Ave and left. As we passed by an elder home I saw an elderly couple desperately hailing. Noted.

      Dropped off my St Francis fare and returned. They were still there!

    • Very short fare, from 7th Ave and Irving to the UC Hospital (near 3rd and Parnassus). Checked in via radio for an en route order at the UC Hospital. She was ready to go as soon as I arrived and heading toward Glen Park.

      When I first started driving I wouldn’t have been excited to go to Glen Park from the UC. The optimal route is difficult to determine given rush hour traffic and traffic signal priorities, and Diamond Heights/Glen Park is rather maze like. In my wiser years my ways have changed. I worked out a nice path and we flew down O’Shaughnessy with Toyota’s Hybrid drivetrain whining in pleasure as it gobbled up regenerative juice.

      After dropping checked in for an order nearby in Bernal Heights. Another case of “if I had just started driving I wouldn’t know where the f* those streets are.” But, now I know and it was close by.

    • Picked up a middle-aged lady from the Bernal Heights Library. (Thanks for waiting, middle-aged lady.) She had just finished her weekly writing class which she enjoys immensely. Dropped at 23rd and Dolores.

      23rd and Dolores is rather residential and not a prime place for finding passengers or hailing cabs. I spent a minute filling out my waybill after my passenger had departed. To my surprise a man gave me the “eye” as he walked toward my freshly empty cab and I gladly welcomed him in. We headed downtown. Nice. $70 (revenue, not income) in about in hour. Keep up the good work, San Francisco economy.

  • Thursdays I work in the dispatch office for a few hours before driving. Normally I answer incoming telephone requests for taxi service. I kindly greet our callers and enter / confirm their address, destination and special needs. Dispatch operations at our company use an older but very effective computer solution from the 90s. The system automatically remembers past callers and matches their address. I simply send this to the dispatcher’s screen and s/he sees all the currently open orders. (I’ve written about the radio dispatch process once or twice before.)

    Unfortunately this past Thursday our computers didn’t cooperate so we were forced to use the old fashioned system — paper and pen. I take orders (address and phone) on the left side of a pad of paper, the dispatcher finds cabs and writes the cab number on the right side of the paper.

    I was amazed at how well this worked. For the drivers and customers there was little difference between the two systems. We were able to dispatch drivers to hundreds of dollars worth of business with a phone, a pad of paper, and a motorola radio. Sometimes low tech is okay.

  • Sometimes high tech is okay too. Thursday I made an extra $70 during my shift using Cabulous, smart phone software that connects individual drivers with passengers via GPS maps. (Disclaimer: I am an advisor to the Cabulous team.)

    So far the Cabulous team has been doing their best to balance the difficult equations of driver availability vs passenger demand on the Cabulous network. But, regardless of technology used, from hailing a cab with your hand to calling a company dispatch service, this is an impossible task.

    I’ve helped test the Cabulous driver system on the iPhone on AT&T and my BlackBerry 8820 on T-Mobile. Over the past 6 months of testing and subsequent public release regular usage I haven’t earned much more than $20 per shift and not usually exceeding 2 successful hails per shift using Cabulous.

    Yesterday was different. As usual, I used the J2ME CabulousLite app on my BlackBerry 8820 on T-Mobile. The “lite” app uses a very basic interface to let me login and then it simply periodically reports my GPS location to the Cabulous server. Twilio integration notifies me via telephone text to speech where people have hailed me, and if I accept then I can call the passenger directly.

    I was amazed by how much extra it earned me — I earned just over $70 just from Cabulous yesterday. I was also impressed how well it integrated with my normal sources of fares: street hails and traditional radio dispatch.

    Here are my Cabulous hails:

    • After picking up a radio dispatch order in Marina/Cow Hollow I was headed toward the JCC with a very precocious 5 year old and her adoring mother. (When I had pulled up to their luxurious abode the 5-year old clearly raised her hand to hail my cab. A lifelong customer.)

      Approaching the JCC I received a Cabulous call. (Unfortunately, there isn’t a good way to distinguish a Cabulous call from a personal call, my only hint is whether or not the incoming call registers as an existing entry in my personal address book.) Clicked on the speakerphone to hear madame Twilio say it was relatively close — Golden Gate and Scott. (Another “unfortunately”, the Twilio robot only gives me the raw address. As a somewhat experienced driver I’m able to ballpark the intersection hearing an address, but many new drivers wouldn’t be able to determine the pickup point without a cross street.) The JCC is at California and Presidio. 10 minutes max, more like 5.

      The fascinating part about Cabulous is that technology alone does not make the system successful – it’s half technology and half driver initiative that makes a positive experience for both the driver and passenger. As I use the system more it becomes clear that significantly more onus is placed on the driver to provide a good experience for the passenger with Cabulous than with traditional dispatch (and even traditional computerized dispatch solutions like DDS).

      I now call all passengers as soon as I accept the hail. I call them to accomplish a few key goals:

      • Establish a personal relationship: I identify my name and taxi company affiliation and confirm that they hailed me using Cabulous.
      • Confirm pickup location: “Are you at 2238 Geary at Divisadero?”
      • Sometimes I’ll ask their destination if it’s a distant location.
      • Estimate arrival time and receive verbal commitment that party will wait for me. This is crucial. In this case, “I’m about 5-10 minutes away, are you willing to wait?”

      The amazing thing here is that humans are much more willing to wait if they are “in” the queue and have an accurate estimate of time. Humans get very angry when they are queueing for an indeterminate amount of time, worse if they’re queuing for a falsely reporting amount of time, and worst of all if they’re queuing for an unknown time and believe that the queuing/fulfillment system is flawed.

      In this case, the above phone call addresses all the above common queue concerns: yes, you’re “in the queue”; yes, there’s an accurate estimate of time; yes, there’s a fair and transparent queueing system (it’s simple: you’re next).

      I picked up the fare at Scott and Golden Gate, and saw an empty taxicab drive by. My passenger didn’t even consider hailing him, he knew I was on the way. He paid me well. $20

    • I had picked up another radio order, also from Cow Hollow, but this time heading downtown.

      I received the Cabulous hail just after the passenger entered the vehicle. I’m a good sport so I accepted to see where they were — maybe they’d be close to our destination. (Unfortunately, a driver must accept the order before the location is revealed.) To my surprise the order was downtown, perfect.

      I called the passenger to confirm his location and that he was indeed willing to wait for me to arrive. Again, this is essential for both parties to have comfort with the transaction. He was still in an office and would wait for me to get there before even going down. Nice, captive audiences are best. I didn’t ask destination.

      After dropping my fare off nearby I headed around the corner and stopped at the address given and gave him a quick call. He saw me (told me my cab number and color from his upstairs view) and said he’d be down in a few. 10 minutes later I wondered if I had made a mistake. Should I have taken him at his word? Did he just grab another cab? I called him back, “I’ll be down in 5. Going to SFO.” He knew the magic words. Nice trip to the airport, $40.

    • Last fare was a pickup near Geary and Presidio. A bit challenging as the woman didn’t give me her actual address, just saying she was near the Best Buy. Not very helpful. We eventually came up with Geary and Presidio as a meeting point. Worked great. Another $12.

    A total of just over $70 from Cabulous. Nice.

Posted in taxi, work | Tagged , , , , , , , , , , , , | Leave a comment