Why it sucks to be an in-house programmerDecember 2007
A couple weeks ago Joel Spolsky posted a great transcript of his talk to Yale computer science students. Among other things, he talks about why it sucks to work as a programmer at a company whose focus is not software:
You never get to do things the right way. You always have to do things the expedient way.... as soon as your program gets good enough, you have to stop working on it. Once the core functionality is there, the main problem is solved, there is absolutely no return-on-investment, no business reason to make the software any better. So all of these in house programs look like a dog’s breakfast: because it’s just not worth a penny to make them look nice. Forget any pride in workmanship or craftsmanship you learned in CS323. You’re going to churn out embarrassing junk, and then, you’re going to rush off to patch up last year’s embarrassing junk which is starting to break down because it wasn’t done right in the first place.... When you’re working on products, you can keep refining and polishing and refactoring and improving, and if you work for Facebook, you can spend a whole month optimizing the Ajax name-choosing gizmo so that it’s really fast and really cool, and all that effort is worthwhile because it makes your product better than the competition.
Joel couldn't have said it any better. Great programmers are craftspeople, and like designers, musicians or writers, they have a strong sense of pride in their work. They want to create something that's great, not something that just gets the job done. They also want to work with and for people who value the work in the same way. It's no fun working for management who just wants to know that the job was accomplished as cheaply as possible.
I have to admit this is one of the reasons why I started my own software company. I wanted more control over the work I did. If a new client comes to me with work that seems absolutely boring or a time frame that makes it impossible to do the job right, I have the option to turn it down. If I want to spend the next three days working on an Ajax gizmo just for the fun of it, then I can do that. Sure, I have to worry about the profitability of turning down clients and spending time on non-revenue projects. But I'd rather come to work each day feeling motivated, and leave feeling proud of the work I did, even if that means that I don't make as much money as the next guy.
It sucks for companies too
From a December 2007 SBA study:
It was once assumed that college graduates would graduate and then go to work for a Fortune 500 firm; that is still true for many people. What is also true, though, is that more students today see entrepreneurship as a viable option for their careers.
I have to assume that since more students look to starting their own business, and since it's getting easier for them to do so, it's going to get harder and harder for non-tech companies to find good programming talent. Especially since they already have to compete against guys like Joel who convince them to go work for Fog Creek and get lots of really cool perks.
And it's getting worse and worse for those companies as good software becomes more important to their business. Customers expect the same experience from the e-commerce website of a HVAC company as they do from Amazon. And if that internal workflow software really worked as well as applications like Gmail, then maybe production costs could be cut enough to remain competitive.
Or will dependency on technology ultimately drive good businesses to manage their IT departments like software companies? Where does that leave everyone else?