I was contacted this week by an old acquaintance, and he had a proposition for me.
"Hey, I hear you're a programmer! That's great, because my buddy and I have
this idea for a business. We have everything important figured out, and all we need is a programmer to throw it together."
On the surface there isn't really anything unreasonable about that statement. These guys know what they want for an application, they "just" need the technical know-how to implement it. So, quelling my urge to say something flippant, I penned a reasonable response.
"Well, I have some other projects I'm involved in right now, but I'm always happy to take a look at something new and see if it's a good fit. If you want to do this as a strictly cash-for-labor exchange, it would probably take $X-per-hour to get me interested in spending time on it. If, on the other hand, you don't have any startup capital and are interested in trading equity for this work, I would probably have to see at least an X% cut of the company (and this option would, of course, be predicated on whether I felt the business was a viable one that I'd be interested in being invested in)"
Although I really didn't expect him to be interested in meeting me at those terms, I expected maybe a counter offer or an indication that he was expecting Y instead of X. What I actually got as a reply surprised me a little.
Hey, so, we aren't really prepared to pay. I mean there isn't that much to it, it's just a website with a database, I was hoping you could just throw it together as a favor. Oh well, thanks anyway
I thought about this for a minute, and realized that implicit in the conversation are several assumptions (or perhaps more accurately, conventionally perceived "truths") with regard to the craft of software development.
1)"there isn't that much to it" = "software is really easy to write"
2)"We have everything important figured out" = "in a business, the actual software is just icing on the cake"
3)"All we need is a programmer" = "software developers are cogs in a machine, or interchangeable components of an assembly line"
So then my question is this: Are these common assumptions within the software industry, and more importantly are they accurate?
Assumption 1: software development is easy
This is certainly an opinion I'm used to dealing with, and I'm sure most of you have experienced it as well: "This isn't rocket science, all we need is a program that does [insert complicated feature here]". Unfortunately it's all too common to be under the illusion that software is about 1/10th as tough to build as it actually is. Now we could say that's not unreasonable to assume, because to a non-technical user the User Interface IS the software, so they only can perceive 1/10th of the full application anyway. Based on that fact it wouldn't be illogical to conclude that it's no big deal to just add another button there at the bottom that completely changes the work-flow of the application. This is one misconception of the software industry that in my opinion can be 100% debunked: Software development is hard. We have tools to mitigate that; there are good development methodologies that can keep us focused on what's important, and good tools that can amplify our productivity, but at the end of the day it's difficult to produce good and simple software.
Assumption 2: software is just fluff compared to the business
This is another attitude I've encountered more than a few times, and again the surface value of the argument seems reasonable. After all, software can be made to do anything (within reason), so it isn't really the software that we're selling, it's the business concept. It's the product or the service that's making us them money, not the code. Now in a way, that's very true: great software that has no utility is perhaps not great software after all. However, it would be wrong to take that statement and turn it around to say that a great business idea will succeed regardless of the software that acts as it's delivery medium. Whether you are a product or a service company, the software is telling your story and your business WILL be judged on whether it is easy to use and doesn't break down. The greatest business in the world would not be able to overcome a millstone of bad software around it's neck. This misconception is, in my opinion, false and getting falser.
Assumption 3: programmers are interchangeable pluggable components
FULL DISCLOSURE: I'm a programmer, I have a vested interest in this not being true.
Nevertheless, I have experienced this opinion many times during various job-searches. A company is experiencing time-line problems, and the "obvious" solution is to get 5 more programmers. More manpower = more progress, right? Now of course this is a biased opinion, but I don't think all programmers are created equal. Plenty of other bloggers have written on the subject of the "Rockstar" programmer, that mythical super-productive hero who can carry a project on his back, and I'm not entirely convinced that he exists. That being said, I do think that the right people in the software developer roles on a project can make a difference of at least an order of magnitude. What might take one average-joe-coder 10 hours might be done in 1 if you have the right guy for the job, and if that's true I think I can safely throw the above assumption right out the window.
What do you think? Has the software industry changed to the point where the above assumptions are becoming more viable? Or is it just that the things potential customers believe about software are changing because of the pervasiveness of technology today?