Archives For March 2011

Last week was my blogging debut, and wow, what a reaction.  However, I think the most interesting discussion actually occurred in the comments to the previous blog post, The Hunt for Engineers: Expensify and the surprisingly difficult challenge of finding the right people.  I think the controversial statement in the previous blog was that we look for people with “a great work ethic, almost to the point that some of your friends might call you masochistic”.  But what does that really mean?

Some of the commentators thought that it was some sort of codeword for working people to death.  And when I mentioned we don’t discriminate by nationality (we’ll hire you regardless of visa status), the assumption was it meant we hire people who are desperate and kept in check by fear of deportation.  In other words, most commentators assumed the worst interpretation of every single word because, surely, who in their right mind would work so hard as to bewilder their friends?

The answer is, obviously: people who work harder than their friends by choice.  People who have so much passion and ambition that they can’t be stopped from working, and who pursue that ambition with such vigor that their friends simply cannot understand.

But all that is relative.  How you interpret those statements depends on a lot of assumptions, and different assumptions lead to wildly different conclusions.

For example, some people claim startups work 70 hours/wk in an endless period of “crunch time”.  Others suggest that nobody can possibly work more than 17 productive hours/wk.  There are so few hard numbers to analyze that everybody works from anecdote, myth, and legend — leading to wild accusations without substantiation.  So in an effort to move the discussion forward, let me bring some data to light.  Behold, for the first time, the Expensify workweek:

As for how to read the chart, the X axis is weeks (since Expensify’s start), and the Y axis is hours (number of “real hours”/wk).  A “real hour” is “an hour spent doing productive work” — graded by the honor system.  Like any real-world dataset, there’s something for everyone, and I’m sure you can argue any conclusion you like.  But the conclusion I’d like to argue is, on average, we as a team work 50 hours/wk, week after week.  Often people work more, and very often people work less.  But nobody has ever worked more than 70 hours/wk, and nobody puts in substantially over 50 hours for an extended period of time.  This is what hard work means at Expensify, and I’m very curious to hear how it compares to your experience.

I’m sure we’re not alone, but Expensify is the only startup I know that tracks hours.  (If you do, please share your data.)  Unless you’re actually billing hours to clients, there might seem little reason to.  But tracking hours gives two, extremely powerful benefits:

  • Everybody knows, objectively, when they’re not living up to the team’s expectations, and by how much.
  • Everybody knows, objectively, when they’ve gone above and beyond their obligations, and by how much.

I have no doubt that most people will latch on to the first bullet as if it’s the only one listed.  Furthermore, they’ll say it’s all a tool to convince people to work harder, putting in endlessly more hours toward an insatiable corporate appetite.  But as hard as it might be to believe, the main motivation behind this system was actually the second bullet: to convince people to work less.

See, as we’ve made patently clear, we look for a very unusual sort of person.  The sort who has done more before joining college than most people will ever do after.  People who have audacious plans for their life. and who will stop at nothing to succeed.  These are over-achievers by birth; people who go home after a hard day’s work and pick up some project that’s even harder.  These are people who move mountains on a daily basis, just to see what’s underneath.  You might not know any of them.  But they exist, we have several, and we want more.

But a problem with this sort of person is they frankly don’t know when to stop.  They’ll work themselves to death one week, and then burn out the next.  They’ll casually do something in an hour that’d take an average person 10, but then spend 10 hours screwing with the CSS. Without the right sort of environment, this person will not only fail to excel, but will genuinely underperform.  They’ll get bored and slack, be disruptive, or tend toward outright insubordination.  I’m as guilty of that as the next.

So the goal is to channel this enormously powerful but unstable force in a positive direction.  And half of that is giving clear guidance.  But the other half is setting very clear expectations as to how much of their time the company expects, and genuinely encouraging them to take the rest off.

I don’t want someone to work 70 hours/wk.  I work nearly as hard as anyone on our team, and I know it’s incredibly hard — nearly impossible.  I don’t know that I’d believe anyone who said they put in 70 productive hours in a given week.  I don’t want anyone to feel they need to attempt that impossible task, or to pretend they’ve accomplished it.

But at the same time, I do want everyone to work 50 hours/wk.  I’ve generally maintained at least that for years, so I know it can be done.  It’s not easy — it requires sacrifice — but not nearly as much as you’d think.  I’m plowing through 6 seasons of Lost, I have dinner with my wife every night, I recently got married in Italy, I spend weeks overseas every year, and I walk my amazingly cute beagle on the beach most weekends.  There are 168 hours in a week; if you can’t work 50, you’re doing something wrong.

In fact, the primary purpose for all this (I’ve been doing it for over 5 years now — it only takes seconds each day) was to create an objective tool to achieve a desired work/life balance, in large part to live up to my family obligations.  I want to work extremely hard, but then go home with complete confidence that I’ve done right by my startup ambitions, and can therefore relax without guilt.  Setting clear goals encourages me to work the right amount, day after day, without anybody looking over my shoulder — but then to stop and do something else.

In short, I want everyone to maintain an aggressive pace, one that seriously challenges their work ethic, but one that I know from personal experience can be maintained over the long run without giving up the good things in life.  I want this because this is what it takes to compete in the startup world.  It’s what it takes for us to collectively achieve our individual long-term goals.  It’s what we need to do to succeed in this venture and lay a strong foundation for the next.

It’s not for everyone.  I expect many people will be horrified to read this post.  And for those who aren’t horrified, I bet your friends are.  But that’s ok, because we don’t want to hire your friends.  We want to hire you.

Update: The end is near, Expensify is hiring a .NET programmer!  Learn more…

Saturday edit: Wow, quite a response to this.  Some additional comments at the end.

Sunday edit: Still going! More comments at the end.

Monday edit: Skip my post and read this one instead.  It says the same thing, but less offensively.  (Or, rather, more offensively to Facebook and Google employees, less offensive to .NET developers, though the underlying message is the same.)

Tuesday midnight edit: After >500 comments, >1000 tweets, and >1000 Facebook likes, I’m closing comments on this thread so we can all get back to work.  The very last comment takes the cake, however, and is a fitting close.  Thanks ez, whoever you are!

As you might know, we’re hiring the best programmers in the world.  Sure, everyone says that.  But my coders will beat up your coders, any day of the week.  For example, Mich is barely 5 foot tall, but is a competitive fencer.  Witold is a 6’3″ former professional hockey player.  Nate practices knife fighting for fun.  And they’re pretty decent programmers, too.

But finding such people is more than a full time job.  Indeed, I spend about half my time on it, while Lisa spends about all hers.  And on top of that we have an army of recruiters out scouring the globe, leaving no resume unturned.  Taken all together, this creates a lot of resumes.  So many that we don’t look at them, because resumes — let’s be honest — are totally worthless.  Rather, we pay all our attention to a few key questions we ask every candidate, each aiming at uncovering a single key point: is this someone we really want to work with?

See, experience is cheap.  All it takes is time.  Skill is harder, but really only requires hard work — a lot of people can get that.  But attitude.  You either have it, or you don’t.  The right sort of person is so passionate about coding, they can’t be stopped from doing it.  They typically started before high school — sometimes before middle school — and never looked back.  They write everything from assembly to jQuery, on PCs to mobile phones, doing hard core computer graphics to high level social networking.  They’ve tried everything.

Everything, that is, but .NET.

Now let me clarify — .NET is a dandy language.  It’s modern, it’s fancy, it’s got all the bells and whistles.  And if you’re doing Windows Mobile 7 apps (which the stats suggest you aren’t), it’s your only choice.  But choosing .NET is a choice, and whenever anybody does it, I can’t help but ask “why?”

Don’t get me wrong: .NET on your resume isn’t an instant showstopper.  But it will definitely raise questions during the phone screen, for reasons that are best explained by simile:

Programming with .NET is like cooking in a McDonalds kitchen.  It is full of amazing tools that automate absolutely everything.  Just press the right button and follow the beeping lights, and you can churn out flawless 1.6 oz burgers faster than anybody else on the planet.

However, if you need to make a 1.7 oz burger, you simply can’t.  There’s no button for it.  The patties are pre-formed in the wrong size.  They start out frozen so they can’t be smushed up and reformed, and the thawing machine is so tightly integrated with the cooking machine that there’s no way to intercept it between the two.  A McDonalds kitchen makes exactly what’s on the McDonalds menu — and does so in an absolutely foolproof fashion.  But it can’t go off the menu, and any attempt to bend the machine to your will just breaks it such that it needs to be sent back to the factory for repairs.

Instead, we look for a very different sort of person.  The sort of person who grew up cooking squirrels over a campfire with sharpened sticks — squirrels they caught and skinned while scavenging in the deep forests for survival.  We don’t want a short order chef, we want a Lord of the Flies, carried by wolves into civilization and raised in a French kitchen full of copper-bottomed pots and fresh-picked herbs.  We need people who can not only cook burgers, but cook anything, from scratch.

See, Microsoft very intentionally (and very successfully) created .NET to be as different as possible from everything else out there, keeping the programmer far away from the details such that they’re wholly and utterly dependent on Microsoft’s truly amazing suite of programming tools to do all the thinking for them.  Microsoft started down this path when they were the only game in town, explicitly to maintain their monopoly by making it as hard as possible to either port Windows apps to non-Windows platforms, or to even conceive of how to do it in the first place.

This decision — or this mandate for incompatibility, perhaps — has produced countless ramifications.  Small things, like using backslashes in file paths rather than forward slashes like any dignified OS., or using a left-handed coordinate system with DirectX instead of right-handed as was used since the dawn of computer graphics.  Big things, like obscuring the networking stack under so many countless layers of abstraction that it’s virtually impossible to even imagine what bytes are actually going over the wire.  And a thousand other things in between: programming tools that generate a dozen complex files before you even write your first line of code, expensive servers that force a remote GUI terminal on you to do essentially anything despite a few keystrokes being perfectly adequate for everybody else,  a programming culture almost allergic to open source licensing.  The list goes on and on.

None of this makes you a “bad programmer”.  All these differences are perfectly irrelevant if you just want to make 1.6 oz burgers as fast as possible, and commit the rest of your career to an endless series of McDonalds menus.  But every day spent in that kitchen is a day NOT spent in a real kitchen, learning how to cook real food, and write real code.

Even worse, every day spent learning a Microsoft kitchen takes TWO days to unlearn, meaning once you get a reasonable way down the .NET career path, there is almost no going back.  You become so steeped in tools and techniques that have absolutely no relevance outside of .NET that you are actually less valuable to a startup than had you just taken a long nap.

So what’s the moral of this whole story?  Two things:

  1. If you ever want to work in a startup, avoid .NET.  It does you no favors.
  2. If you are a startup looking to hire really excellent people, take notice of .NET on a resume, and ask why it’s there.

It might sound harsh, and it is.  But sometimes we only have squirrels to eat, and we need them to taste good.

-david (Follow us at https://twitter.com/expensify)

Saturday edit: Wow, this post has hit quite a nerve.  Had I known it was going to take the internet by storm I probably would have been a bit more careful with my word choice (especially referring to .NET as a language, doh!).  But just to clarify a couple points, 24-hours into the storm:

  • Yes, .NET developers are great at what they do. It’s the most modern platform for application development on the planet.  Microsoft has always produced the best tools for building internal business applications, and .NET is their masterpiece.  There’s a reason why they own that space; they earned it.  That space employs millions of people, and those people are unquestionably the masters at what they do.
  • But what they do is very, very rarely startups. I’m sorry if that sounds offensive, but that’s a simple fact.  You can measure this yourself: go to any list of startups, maybe look at YCombinator’s recent graduate class, or Scoble’s list of picks for 2010, or Sequoia’s list of seed companies — or  go find a list you like better.  Do a curl (or your .NET equivalent) on each domain, and see how many are running a Windows server: I think you’ll find the fraction very small.  Don’t get me wrong: there are a lot of people who aren’t interested in working at a startup, for a lot of very valid reasons.  But if you are the odd person who is interested, it’s worth asking: why do so few use .NET?
  • Because .NET is designed to extend, not disrupt. The same could largely be said about J2EE, but in general anybody who “grows up” with these self-contained, highly-automated platforms can’t help but view computers in a different way than those who start from a lower, less automated, more difficult level.  (As one of the coherent commentators says below, Joel Spolsky himself laments schools teaching Java with the same basic reasoning of my article above, albeit more diplomatically stated.)  .NET is designed to tightly integrate with and seamlessly extend the Microsoft stack in extremely powerful but ultimately incremental ways.  Again, there’s nothing wrong about that if that’s what you want to do.  But if that’s not what you want to do, then .NET probably isn’t the right choice, as evidenced by how few people in the startup world choose it.

Again, this isn’t a rant against .NET — it’s fine.  It’s not even a rant against .NET developers being incapable of learning — they can learn as well as anyone.  It’s a rant against .NET teaching the wrong things for startups.  And about how people who use it for too long, can’t help but learn those things.  This is a rant about how startups, by definition, need to think of things from new angles, and those angles typically don’t involve .NET.

Anyway, I was going to leave all this to blow over before making any comments in a follow-up post next Friday.  Indeed, for all the outrage and fury, this is actually common knowledge amongst startups, and I was going to support that with a bit more data to win over the skeptics (at least, those who were open to listening).

But I’ve seen some recent comments that this post might have upset and offended the SMB community that we serve, and that I cannot abide.  For that, I’m truly sorry.  As someone who grew up using and ultimately becoming frustrated with the limitations of Microsoft tools, and grew up submitting and hating small-business expense reports, I hope I can convince you that we’re fighting for the same goals.  Even if our tools and techniques might differ wildly.

Sunday edit: Incredible that this post is still going strong, on a weekend no less.  But what’s most interesting is how the comments have gradually shifted over time.  Granted, me even pointing this out will probably have an effect on comments going forward, but the general trend has been:

  • First wave: Raw, incoherent hate, constructed from near-pure profanity.  I took the liberty of deleting most of this, as this is a PG-13 site.  Perhaps 1% of the first wave agreed with me.
  • Second wave: “Reasoned” hate, though most of that reasoning was done by extrapolating my misuse of one word (“language” instead of “platform”) into every conceivable sin.  I’d say maybe 15% of the second wave agreed with me (if weighted by actual coherent text).
  • Third wave: A very heated discussion.  It would appear that every possible insult had already been slung so there was nothing left to do but actually discuss the merits of the post.  I’d say maybe 25% of the third wave agreed with me.

It’s harder to get a sense of agreement/disagreement from Twitter as most people just retweet without comment.  But I’d say those who do make comments have fit the rough curve above.

Just about everyone at Kynetx Impact is looking to spread the good word and encourage the use of APIs. While developing an API can be a viable option, the assumption behind their rampant production is that an API will help the developer reap some sort of great success. Our very own David Barrett has a different story to tell.

Like everyone, we built out our API with the hope that a bunch of people would integrate, but in fact three things happened:

1) Very few people cared to integrate.  Instead, the biggest user of the Expensify API is still Expensify.

2) The vast majority of those people who did integrate never did anything with it.  They applied, they talked with our engineering team — in a sense, we paid the entire “cost” of integrating with them, even though they never actually ended up launching anything.

3) Those tiny few people who did actually launch something significant never actually produced any value for us.  We had high hopes on both sides that joint customers would see all this combined benefit, but in practice very few did.

Hear David speak and find out the full story of the Expensify API at the Kynetx Impact conference – he’ll be speaking on Wednesday at 11 in room 300. Come one, come all!

As many of our regular readers have probably noticed, we’ve been mentioning here and there for quite some time that we are in the market for new employees. And as we’ve said before, we’re taking a drastically slower route toward hiring than many startups do. But we’re being extra picky about who we hire, because we’re trying to preserve two things that are very important to us:

  • the integrity of our product, and
  • the corporate culture we’ve very carefully crafted

In other words, not just any Computer Science major will do. In fact, we don’t even care if you have a college degree. We don’t care if you’re a U.S. citizen.

What we do care about?

  • a great work ethic, almost to the point that some of your friends might call you masochistic. We work long, hard hours doing what we love, and if you’re the kind of person who wants to clock out at 5:00 or spend half the day surfing LOLCats, this isn’t the place for you.
  • a great character: fair, honest, with a decent sense of humor, and absolutely zero drama. Please, we get enough drama from watching Dexter.
  • talented and fast at picking new things up: you should be technologically multilingual, with the kind of intellectual flexibility that would make Neo’s bullet-avoiding backbend in The Matrix look like your grandma doing the limbo on a geriatric cruise. This doesn’t just apply to programming, though we demand a high level of talent and capability in that arena, for sure: what else are you good at? Can you speak in front of a group? Explain multiple step processes to your luddite relatives? Make a mean seven-layer dip? In essence, what else are you bringing to the table?
  • ambition: you’ve got to have it. We don’t want Expensify to be your final resting place; that’s just not how this industry works. We want people who are mobile, constantly looking for a next great project, working on side projects of their own, and with big plans for the future. And we want to help you get there, too.

Generally, we’ve found that our best applicants also have the following in common:

  • programming experience from way before their college years
  • a zest for adventure – everyone on staff is a world traveler, and have what one of our engineers referred to as a “willingness to get into trouble”
  • curriculum vitae that extend far beyond the classroom and the office: your most impressive work was probably done for the fun of it, anywhere from a junior high school bedroom to an exotic beach somewhere (our preferred location)

The point we’re trying to make is: the expectations are high, but the rewards are higher, and if you think you’ve got what it takes, we’d love to hear from you. We’ll sponsor a visa, buy your lunches, and propel your career to the next level – if you’re the right fit.

While it’s true that we’re no Dr. Seuss, we are definitely going places. Here’s a short list of upcoming events we’ll be attending, sponsoring, and/or speaking at in the next couple of months:

Kynetx’s awesome Live Web conference in South Jordan, UT will feature, among other great speakers, our very own CEO and Grand Master of Dissenting Voices David Barrett, who will be speaking about When Live Web Goes Bad! You can register at impact.kynetx.com to attend this conference spanning March 22 and 23 of this year.

Expensify loves Real Estate agents – and their accountants love Expensify! David will be part of a panel here in Atlanta March 31-April 1, discussing the hypothetical-that’s-not-too-hypothetical, “What if computers collaborated like humans?” We know David’s really excited to meet more of our friends in this industry, and we hope if you’re into Real Estate you’ll consider stopping in to meet with him at the end of the month! You can register for the event at retechsouth.com/attend.

We have to admit that the event we’re really, really excited for this spring, though, is Finovate right here in San Francisco. On May 11, Tom and David will be demonstrating some spectacular new features that we promise will get your heart pounding with Expensify love. So if you get a chance, register now at finovatespring2011.eventbrite.com – you won’t want to miss this one.

See you at the conferences!

Pro Tips: Formulas

micah —  March 14, 2011 — 3 Comments

Expense policies in Expensify offer the option to create custom report fields, which are appended inside each report. Users often ask us how they can include custom fields in a report which are complex and dynamically update with relevant information. There is actually a way to do this with Formulas, a little not-so-secret feature with powerful effects. When used right, formulas can help you achieve pretty much any output you’d want in a report. The best way to learn about formulas is with an example.

A Formulaic Example

Let’s suppose that we have three custom fields in our report, which the submitter of the report is required to fill in: Type of Expense, Client Name, and City.

Now, suppose we want to add a fourth field for our Accountant to use, so that he can code the Report appropriately in the accounting software. He needs the field to include the City name and the report total, along with the report submitter’s email. This new field, however, does not need to be filled in – it can be dynamically generated with the existing values using Formulas.

First, add the title of the new field.

Then, put the formula in the value of the field. Use the formulas help page as your cheat sheet. We can add the report submitter’s email with: {report:submit:from}. Let’s also include the City by accessing the field’s value: {field:City}. Finally, we add the report total’s reimbursable amount to the mix: {report:reimbursable}.

The Final Result

To recap, the value for the field Accounting Code is: {report:submit:from} – {field:City} – {report:reimbursable}. This ends up showing the report submitter’s email, the City field, and the reimbursable total. Moreover, this field will be automatically calculated on the fly inside the report.

To make the report title itself dynamic, just add a custom field named “Title.” You can check out our formulas, and other tips on how to use them, in our awesome guide here: https://www.expensify.com/help/formulas. Explore the power of formulas in your expense reports.

SXSW

You might be wondering why Expensify isn’t at Austin’s notoriously cool South by Southwest Music (and Tech) Festival this year. We do love Austin, Texas. But alas, we’ve committed ourselves to staying in the Bay Area for a little bit to finish polishing up some great new features we want to roll out for you all sooner than later. That commitment doesn’t stop us from daydreaming, though, about what we’d do if we were at SXSW this year. In particular, we’re in love with the music – it’s SXSW at its roots.

Top Three Bands We’d Like to Hear:

  • Zion I & The Grouch: hip-hop legends from the Bay Area (represent!)
  • Gay for Johnny Depp: alt-country, yeah, but mostly we just love the name
  • Noah and the Whale: I (Meghan) have admittedly been loving this band for some time, so I’m pretty jealous of anyone who catches them this year

What about you guys? Who’s attending SXSW? What can you not wait to see and hear? Let us know in the comments!