Archives For Job

Our team is like one big, happy family, so every new hire means welcoming another member to the Expensify family. In July alone, the Expensify team grew a crazy 26%, bringing the total number of full-time employees from 24 people in January to our current number at 45.

Expensify Hiring, Team Update, Announcements

The Breakdown

In the last few weeks, we grew our team by a total of 9 people: 4 in sales, 4 in engineering, and 1 in marketing. In August, we’ll be adding another 4 people who will be working remotely from the Upper Peninsula in Michigan.

Why the sudden ramp up?

Truth be told, we’re pretty picky about who we hire. We extend offers to candidates who can resonate with and thrive in our culture, but who can also get shit done. As a result, we sometimes extend an offer to those who can’t start immediately, and we work with them to figure out an ideal situation for both parties. In other cases, the right person came along at the right time, just as we were thinking about creating a new role. More than that however, we’re flooded with hundreds of inbound leads a day. As a result, we’ve purposefully grown the sales team to meet demand, well, because we need it!

Now, Onward!

Things are changing quickly now that we’re close to the big five-oh. More colleagues means expanding our space, even including a work space inspired by the window counter at Peet’s Coffee. We’ve implemented new software for on boarding new hires. We’re ramping up for our biggest offshore ever in September, but not before a trip up to the Upper Peninsula in Michigan to meet the other half of the team in mid-August.

Most of all, we’re excited to welcome everyone into the family and expose them to San Francisco. From Giants games to local hikes and then some, you can be sure that things will get real cozy, real fast here in the next few months.

I don’t have an official title at Expensify but on any given day, I work with the financials, recruiting efforts, hiring, onboarding, office management, relocation, etc. My favorite part of the job? Interviewing candidates. I take great pride in overseeing the hiring process at Expensify, ensuring that we grow our team to match the amazing talent we already have on site.

With that said, I wanted to pass along some advice for interviewing. First and foremost, treat interviewing like dating. Whether you are good or bad at dating, mastering a good interview comes with some basic steps.

Introduce yourself

Introduce yourself

1. Introduce yourself: When you meet someone on a blind date (much like interviewing), you introduce yourself, right? You try talk about yourself a little bit to give your date a sense of who you are, what you are passionate about and why you might be interested in them. This allows your potential partner (or company…) the opportunity to see if it is a match. Résumés aren’t helpful for this, providing only a shallow overview of who you are and after a while, all CVs tend to look the same… which is why we ask our application questions. We want to give you the opportunity to introduce yourself, and put your best foot forward.

2. Make sure you actually put your best foot forward. When you meet your date for the first time, you shower right? You try to look presentable. You know that your date doesn’t have that much to judge you on and will be grasping at anything to make an assessment. Just like that first date, interviewing requires a bit of presentation. Take away anything that makes that might be a distraction from your best foot. Distractions can include (but are not limited) to spelling errors in your emails or on your CV or not following directions. Showering typically helps too but is not required.

Be yourself. Always.

Be yourself. Always.

3. Be yourself (don’t hold back). This one is fairly simple for us. We are a laid back, close knit company. We backpack for a month every year as a team, and let me tell you, things get intimate. Keeping that in mind, we want to see who we are going to work with every day. The reality is you spend a crazy amount of your waking hours at work, so its beneficial for you to feel comfortable letting your hair down.

4. Don’t let your nerves get the best of you. Remember we are trying to woo you too (say those last three words 10 times fast). We are as nervous as you are. Interviewing (and dating) is this back and forth of “does he like me? Do I like him?” If you are nervous, we might not be able to tell how much you actually like us.

Are you going to swipe right on Expensify?

Are you going to swipe right on Expensify?

5. Ask good questions. This one is more important than you might think. Whether its for dating or interviewing, we want to know how interested you are in us. The questions you ask are how we gauge that. It’s true, for Expensify at least, we have a ton of information on our site about the company, product, strategy etc. But we strongly believe in Albert Einstein’s saying “The important thing is not to stop questioning. Curiosity has its own reason for existing.”Our site doesn’t provide all the answers. Come on, we know you can think of something to ask us.

You are looking for a match in your job search. Interviewing is taking a chance, trying to find what role is going to fulfill your needs, provide satisfaction on a daily basis and help you grow into who you always hoped you would be.   So are you gonna swipe right, or what?

This is where I live.

This is where I live.

I work for the best Silicon Valley Start-up, Expensify.  I also live right off the shore of the largest body of fresh water, Lake Superior.  Most importantly though, I’m helping to bring Silicon Valley to the area I love and much-needed jobs along with it.

In January of 2013, I was approached by another employee of Expensify that lived in the same area as I did.  He wanted to bring jobs to Northern Wisconsin and Upper Michigan.  He had been experimenting with three people for a couple of weeks to see if it was a viable option to staff a midwest workforce alongside our international team we already had in place and still stay cost-effective. These jobs could be seen as basic data entry positions easily trained to anyone with minor computer knowledge, but there is a growing amount of complexity as Expensify moves more into the global market and receives data from around the world to process for our clients.  The best part, the agents could work from home!  He was also looking into the possibility of bringing entry-level developer jobs to the area.  Where did I fit into all that?  He needed someone to help get it all started, maintain, and manage it.

At the time I was running my own computer repair business full-time out of my home and did contracted computer IT for local businesses.  After hearing his initial pitch about Expensify and what his vision was for the area, I was sold.  When you live in a town with a population of under 6,000 people, and don’t want to move out to Silicon Valley, you never really think you would get a chance to work for a San Francisco based tech start-up.  So, I started working for Expensify as an independent contractor, slowing building a data entry workforce, training them on the work in person and then allowing them to work from home after that.

Fast forward a year.  I’m now a full-time member of the Expensify team and Expensify has brought over 30 jobs to the area and is still expanding!  Exploring more than just data entry jobs too.  How about some Help/Support Email Agents and some more entry-level developer jobs?  We’re looking to utilize an area and its population that most companies never think about.  Even better: we’re still staying cost-effective despite previously relying on a solely international-based workforce as our local employees have shown to be extremely accurate and efficient. This in turn pushes our international team to higher standards increasing performance across the board.

It’s extremely exciting to be a part of a company that is willing to bring Silicon Valley to an area that only hears about it from the news.  But the best part is to see the expression on people’s faces when I tell them that I live in Northern Wisconsin, but I work for a San Francisco based company.  It always leads to awesome conversations.

Do you want to work more with cloud computing? Great– we don’t! When dealing with financial data, knowing where the data lives is important (and “on someone else’s service” is a poor answer), so we’re leaving the cloud. We have three datacenters in active/active/active configuration, and we’re transitioning ancillary services out of “the cloud.”

A perfectly normal monitor in peak operating condition

 

We’re a Linux shop– currently a Ubuntu/CentOS hybrid environment, transitioning to a full CentOS stack, all managed with Salt (www.saltstack.org). Our site is largely written in PHP and Javascript, but important parts are in Java, C++, plus a smattering of Python holding some rusty parts in place.
Our network stack is built on a Juniper switching fabric, and a pf-based firewalling solution.

 

We would like you to:

  • Build infrastructure! Every system is configuration managed, so ideally you build a web server once, not a hundred times.
  • Support developers! Our developers are as smart as you ideally are– they need help provisioning development environments, not printing Excel spreadsheets.
  • Participate in a one-week-in-four on-call rotation! The world is beautiful at 3AM– but for better or worse you’ll rarely get to see it, as “the environment is melting” is the exception rather than the rule.
  • Read and debug code! You need not be a developer yourself (though it wouldn’t hurt), but tracking down a bad PHP function call based on log messages shouldn’t scare you.
  • Make big trouble for moose and squirrel! Oh wait, the KGB shut down years ago…
  • Work in San Francisco! Don’t live here? No problem, we can change that.

If you are interested in applying, please send your resume to jobs@expensify.com with a letter explaining why you are awesome and how you found us.

This place is awesome, our product kicks ass and our team is a mesh of rockstars who are passionate about what they do. We’re looking for all sorts of people — always engineers and sales, definitely a designer, but right now we have a desperate need for QA.

No Bugs Allowed

No Bugs Allowed

Now, we’re mostly a bunch of programmers, and to be completely honest, we haven’t had great experience with dedicated QA teams in the past. They generally fit very large, very slow organizations where it takes a dozen people to do anything. But we’re super small, very fast moving, so we need someone who can hang with that.

What exactly that is we’re not sure — after all, we’re looking for someone with QA expertise to tell us what to do. But as best as we can tell, we need someone who is comfortable with PHP, JavaScript, jQuery, HTML, CSS, and ideally a smidge of C++. Don’t worry, we don’t expect you to know all of them. Unless you are a mega rockstar. But a regular rockstar would be lovely too.

Are you still interested? Sweet! Next steps are as follows:
Check out expensify.com/jobs, read more about us, the team, and get a feel for our environment. Are you as into us as we are into you?
Email us your resume and the answers to the questions below with “Sweet QA Analyst” as the subject line (jobs@expensify.com)

  1. What is the difference between QA and programming, and why do you prefer to do QA instead of becoming a programmer?
  2. What do you want to do with the rest of your life, and how is Expensify a step toward your long-term goals?
  3. Please forward this application to three people you think we should hire, cc’ing jobs@expensify.com. (Don’t worry, we’re eager to hire you and them. Indeed, good people have good friends: solid referrals here increase the odds we’ll hire you.)
  4. How did you hear about us? A job posting? Chalk on a sidewalk? From a friend? Let us know where you saw this opening.

We look forward to hearing form you!

If you know anything about Expensify, you’ve probably heard our CEO David Barrett speak about the “bottom up adoption curve“. As a freemium service, Expensify has seen exceptional bottom up adoption among small businesses – especially those where employees actively seek out alternatives to expense reporting “solutions” that REALLY suck. And in a big way, employees continue to “sell” Expensify with great success across all manner of small business.

Throughout our journey, we’ve kept one ear open to the employees selling our product, and the other to the accounting and finance departments that have had to implement us. Through this approach, our product is poised to command an extensive presence among medium-sized businesses.  And so, with the stage set and the curtains drawn, Expensify is in the first act and first scene of building out a salesforce of the future! Expensify Sales Propaganda

What do we mean by salesforce of the future? That’s a pretty nebulous statement, no? Yes, great point! You’re impressing us already!

In answer, the interesting thing about sales at Expensify is that your job will be just as much about selling our product as it will be supporting the diverse group of individuals, employees, managers and accountants that use our product. Thus, we’re looking for people who can speak in the parlance of accounting and finance departments, and who also have a knack for navigating the ins and outs of a deceptively intricate product – and masterfully so.

Can you troubleshoot on the fly? Great! Are you flexible in solving any given problem? Even better!

Our salesforce of the future will also be very comfortable leveraging various sales tools, including our internal lead generation database and unique online demos, to manage and seek out high value leads.

Important Notice: this isn’t a cold calling job. You will speak with people who have a genuine – sometimes fanatical – interest in our product. Yes we’re talking about expense reports, but people love us. Just check out what people tweet about us!

Finally, and most importantly from your perspective, we will aggressively promote the best among our team. Impress us and you’ll reap clear benefits, both financially and for your career.

Still with us? Awesome! Check out our jobs page, and then email your answers to the following questions to jobs@expensify.com:

1. Did you ever have a summer sales job when you were in high school? What did you sell, and what was your personal take on the product? How did you sell it?

2. If you were given free reign to choose the optimal set of sales tools, what would they be and how would they optimize your sales approach? (Feel free to list actual sales tools you’ve used, or fictitious ones. You’ve got free reign).

3. Pretend you had a month to do whatever you wanted. What would you do? And would this be sufficient time to accomplish the goals you set out to achieve?

4. What do you want to do with your life, and how is Expensify a step toward those long-term goals?

Thanks and we look forward to hearing from you!

Recall a certain blog post about Expensify and .NET?  Odds are you stopped reading about five paragraphs in, and possibly missed how “.NET on your resume isn’t an instant showstopper” only that it will “raise questions during the phone screen”.  Similarly, you might have missed that .NET is the “only choice” for Windows Phone 7 development.  Well at risk of dredging up old grievances, I’m happy to announce:

Expensify is Hiring a .NET Programmer!

(Windows Phone coders please apply

As for what we’re building, it’s no secret: we’ve got a cross-platform mobile layer that needs porting to WP7.  It currently works on Android and BlackBerry, and we’re about to launch an iPhone version.  We’re thinking of open-sourcing it if there’s adequate interest; leave a comment below if that appeals to you.  Either way please check out our Elance post for complete details, or just read on:

Port Expensify cross-platform layer to Windows Phone 7

Hello! Expensify has apps for iPhone, Android, BlackBerry, and webOS. A little known fact is that we built our own cross-platform layer, such that we have “write once run everywhere” on these platforms — using native controls. Your mission, should you choose to accept it, is to port this platform to Windows Phone 7.

I somewhat famously blogged about how much I like .NET for Windows Phone, so I’m very excited to start on this project!

It works like this on all other platforms, so we need you to build the WP7 equivalent:

- We instantiate a JavaScript interpreter. This is *not* an embedded browser — on Android and BlackBerry we use Rhino, and on iPhone we use JavaScriptCore. I don’t know what is the best JS interpreter to use on WP7, so it’s up to you to pick it.

- That interpreter loads our cross-platform application logic, written in JavaScript. (This code is currently packaged with the app itself, though could conceivably be downloaded at runtime.)

- The JavaScript calls out to the native wrapper, instructing it to do things like create and position controls, take pictures using the camera, make AJAX calls, get GPS coordinates, and upload photos to our server. We’ll provide you with the JS application code, but you’ll be expected to actually implement all of the JavaScript callback functions.

- All JavaScript code executes in a single thread. So UI events — even if they happen on a different thread (and I’m not sure they do, I’m just saying *if* they do) — should be passed to the JS thread for processing by JS.

- Similarly, most of the JS functions are “blocking”. When the JavaScript asks for a particular UI control to be created, you needn’t (and shouldn’t) return until it’s complete.

- However, some JS functions are “non-blocking”, namely network calls, camera actions, and GPS queries. These should return immediately and be processed in another thread (or even by kicking off an external app and waiting for a response). When they complete, like UI events, the callback should come from the one single JS thread.

- Persistent storage is currently very simple, using flat files on the file system. (Typically writing and reading JSON files.)

We are looking for a long-term contract, ideally with the opportunity to hire on-site in SF if all goes well. (Remote hiring or just remote long-term contract is also fine.) Accordingly, we prefer individuals over teams — especially individuals who like what’s written here: https://www.expensify.com/jobs/need I should also mention that if you’d like to skip the contract and go immediately into hiring talks, that’s fantastic too.

This is a big project, so I’d recommend we split it up as follows:

1) Develop proof of concept. It is a standalone app executing in the emulator that instantiates a JS engine that loads a “hello world” file, which calls a single “alert” function to pop open an alert box. For simplicity, please include a “fixed bid” for this first deliverable, along with an hourly rate that we’ll switch to for future milestones.

2) With proof of concept in hand, flesh out the remaining UI controls. It includes what you’d expect — text, number, date picker, checkboxes, images, etc. A complete specification will be provided; if you prefer we can also handle this second milestone as a fixed bid.

3) Add networking and camera. Historically this is the part that gets hard, as for some reason HTTPS support on every single other platform has been dicey — especially when uploading binary images. This was true for iPhone, Android, BlackBerry, and webOS, so I expect it’ll be true for WP7 as well. Accordingly, I suggest we switch to an hourly rate for this.

4) Release to the Windows Marketplace for Mobile and interface directly with uses to diagnose and resolve issues experienced in the field.

How does this sound? Please let me know, I look forward to talking soon!

-david
Founder and CEO of Expensify

Anyway, I look forward to hearing your cogent, well-considered comments below.  Thanks!

As you might know, we’ve been hiring a steady trickle of engineers, and we’re always eager for more. But we find ourselves without a true sysadmin, and honestly, it’s starting to show.

A long time ago Witold and I joked about scalability being “a problem we’d love to have”. When you are struggling to get anybody to use your product, it just seems like the last thing on your mind. Well, as much as I love the fact that there are hundreds of thousands of people using Expensify — it’s starting to add up to a real problem. Servers are getting overloaded. Databases are getting slow. I think the final straw was when I realized it was going to take over a week — sending mail as fast as we possibly could, 24/7 — just to send out a newsletter to all our users. So I love it, but it’s still a problem, and one that we’re not well equipped to solve.

Sure, we can make due — the great thing about being a programmer is there’s no problem we can’t solve. But our solutions are sometimes, shall we say, suboptimal. We can build anything from scratch, but sometimes it’s better to just install and configure off the shelf.

So this is my request: can you help us hire a sysadmin? Someone ideally familiar with Amazon Web Services (S3, EC2, SES), Ubuntu, lighttpd, PHP, postfix, ssh, and all the other myriad tools of a modern web infrastructure. But also someone with a deep intuitive understanding of disk and memory caching on virtual machines (where every virtual hard drive is actually layered on top of a *physical* hard drive — so there are two layers to manage), is well versed in the consequences of WAN versus LAN replication (high latency, low reliability), and who brings a deep reservoir of enthusiasm and expertise tearing apart a programmer system and rebuilding it the Right Way.

We’ll always need engineers. But engineering isn’t everything. Help us find a sysadmin and you’ll have my eternal gratitude. To apply, please ask them to read up on us on our jobs page and send answers to the following questions to jobs@expensify.com:

  1. When did you get started with computers and why?
  2. Contrast the pros and cons of virtual, dedicated, or colocated servers for a company like Expensify?
  3. What’s the largest, fastest, most reliable, most complicated environment you’ve ever managed?
  4. What’s a Linux command or tool that you think is more awesome than most people realize, and why?
  5. Based on what you can determine from outside the network, what would you suggest we change and why?
  6. When you receive a text message, what’s your first thought?

Thanks, I really appreciate your help!

Update: This position has been filled. Thanks for all your help!

We’re pretty excited about our rad office, but it takes some upkeep. Are you man (or woman) enough for the job? Specifically, we need someone to do as much of the following as possible (in order of priority):

  1. Come in the mornings and generally tidy up.  Erase the whiteboards, take the dishes out of the dishwasher, water the flowers, pick up any random items on the floors/surfaces and put them somewhere better, etc.  The cleaning crew does the basics, but they still leave the office in a bit more of a mess than I’d like.
  2. Keep the pantry stocked.  This means doing a weekly inventory to figure out what we have, what people are eating/drinking, ordering more of that, ordering less of what isn’t being used, polling the team to figure out what new things to add, being here to receive the Safeway.com delivery when it comes, stocking the shelves/fridges, etc.
  3. Be the gatekeeper for engineering applicants, ensuring that they’ve correctly filled out the questions, neatly entering their data into our candidate database, letting me know when they’re ready for evaluation, setting up in-person interview travel arrangements, handling hiring paperwork, etc.
  4. Ensuring our job posts are fresh on all the free and paid job boards.
  5. Generally being on hand to do whatever, whenever.

It’s not a particularly “difficult” job in the sense that there are no special skills required.  The only real showstopper qualifications are:

  • Can be reliably in our San Francisco office at the corner of Sutter and Market before 10am, Monday through Friday
  • Is generally web savvy
  • Has a credit card (you’ll occasionally need to buy things on behalf of the company and get reimbursed)
  • Is at least 21
  • Will work a 50 hour workweek without complaint
  • Is a sufficiently non-picky eater to join us for lunch on most days (we go someplace different every day, and the company reimburses you)
  • Can remain productive in a boisterous environment, with a diverse crew and soundtrack
  • Is super chill and easy to work with.

But that’s such a low bar to jump that it’s an especially hard position to fill.  After all, how do you screen candidates when almost everybody is qualified? Normally we ask a bunch of essay questions, but this time I’m going to do something a little different. This time, to apply for this position:

  • Record a 1 Min Video:  It honestly doesn’t matter about what.  There are very few “hard skills” required to do this job, so we’re just looking for personality.  We’re not looking for a master plant-waterer or anything.  We just want someone cool to hang with, who we can trust will do the work — day in and day out — with minimal drama and maximum friendliness.  Some suggestions:
    • Would you rather have the superpower of invisibility, flying, or mind-reading, and why?
    • What is your favorite beverage, and what is the ideal environment in which to drink it?
    • What was your most disastrous first date?
    • What is the most painful expense report you’ve ever filed?
  • Upload it to YouTube.  Or Vimeo, or Facebook, or anywhere you like to get your video fix.  Test the link to make sure it’ll work when we click it. (Hint: send it to someone else, or use Google Chrome’s “Incognito Window” to verify it works for more than just you.)
  • Send it.  Tweet it to @expensify (follow us so I can DM you back) or email it to jobs@expensify.com, along with a resume or anything else you’d like to include.

That’s all.  If you follow the above instructions, I promise we’ll respond.  Hopefully in a timely manner, but definitely sometime.   Thanks, I look forward to hearing from you soon!

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.