Thursday, September 13, 2007

On Programmers and Business

Software development, just as science fiction writers predicted some fifty years ago, is becoming more and more common activity people are engaged in. Software drives not just traditional computers, it now propels literally everything plugged in; phones, cameras, TVs, cars, even washing machines. The knowledge of at least one simple programming language soon will be as essential as basic writing skills. Why? Because as the complexity of average software increases, professional programmers become less affordable and less accessible for basic programming tasks.

Let me explain.

Just recently a friend of mine was asking for some help with Excel. He needed a fairly intelligent macro for some intense spreadsheet transformations. I had to explain that it would probably cost him about six hours of programmer's time and no programmer will do it for less than at least $60/hour. Actually... no programmer will do it. Period. Because it is boring. Because they have "better things to do" for $60 an hour. Outsourcing ultimately is not going to help because the population of laptops, cell phones, TVs, microwaves and other programmable devices is growing much faster than world-wide population of professional programmers. Therefore nobody will help you with your basic programming tasks.

And you will always have some basic programming tasks, simply because more and more of what we do includes programmable devices. And off-the-shelf components created by professional programmers will not keep up. Charging your customers money, for instance, used to be a purely mechanical operation; you'd put a smile on your face, stick your hand out and a customer lands a $10 bill on your palm. Now you would want to set up a merchant account hooked to a payment gateway all integrated into your accounting and possibly other software. And you inevitably will want something more, something custom from your (without a doubt) highly customizable software. Why? Because it is customizable. But mostly because you already know: what you want is possible. Because it, whatever you have on hands, is programmable.

And programmers willing to help you are getting scarce. The alternative? Learn to do it yourself. Visual Basic (or bash scripting - depends on who's reading this) should be next to English in an average school's curriculum.

Programmers are expensive. Geez... they are getting more expensive every year. And the software they build is getting more complex. And more essential to whatever you do. Starting almost any kind of company these days involves hiring programmers. Your business does not need to be in information technology, but you have to hire programmers anyway.

Bad Programmers

Now lets think about starting companies. Some of them get born, grow, transform, evolve and eventually succeed. But others miserably crash and burn. Books get written about those failures, articles get published and MBA students are getting fresh real world cases to study and learn from. They blame CEOs for their mistakes. They blame ineffective marketing strategies, strong competition and only god knows what else those MBAs are trained to blame failures on.

But you know what? I have grown to suspect that a lot of companies are failing simply because they hired dumb engineers. There are several factors that lead me to believe this.

First, as I said above, programmers are becoming more important as software becomes more vital to what most companies do. Therefore, the impact the quality of engineers has on business has grown substantially. Second, it is very hard to find good programmers because there are fewer and fewer of them measured in "PPD" (per programmable device). And finally, it is damn near impossible to tell good programmer apart from a bad one unless you happened to be an engineer yourself. And most companies are not started by engineers.

Do they teach this in business schools these days? Do they teach that dumb engineers will have an immense impact on your business? A sufficiently dumb engineer may hurt you more than most competitors will. When organized in loose formations, even in modest numbers, they can even kill an otherwise healthy business. I'll write some more about those blood sucking yet fascinating creatures a bit later.

You may label this post as "self important crap" and you are welcome to, but isn't it everyone's belief that his or her profession is the most important one? Similar to university professors who almost without exceptions believe their course is the most valuable.

If only I had a billion dollars...

... I would... no, it's easier to talk about you :-)

Assuming You want to start your own company, you will want to hire some programmers. You will absolutely have to, and the problem you will face is a problem of avoiding hiring dumb engineers because dumb engineers will ruin your business.

And oh my... Businesses in US are plagued by dumb engineers. There are many different factors that allow these unqualified individuals to get engineering jobs, lack of decent interviewers is certainly a big one. Few years back I got into a habit of going to interviews just for kicks, probably because I have worked for the same company for nearly five years and forgot how it was like. What I discovered was shocking: literally everyone can get a programming job if he or she simply goes to enough interviews and tells the same made up story in response to "so... what exactly did you do at company X? Your resume said you wrote reporting system using Java and DB2..."

I am talking 2002-2003 and since then job market has only gotten hotter.

Do Good Programmers Cost More?

What was even more shocking, however, that many of those jobs paid a lot more than my previous employer did. And that company was ridiculously over-equipped with brilliant engineers. Heck, even now, after 4 years, I keep thinking that an average programmer at "Company N" was magnitudes smarter than most "enterprise level senior software architects" with fat salaries I've met. I also hear that Google does not pay as much as most competitors but they somehow managed to hunt down and hire nearly every well known open source developer all around the globe.

You know what it means? As shocking as it may appear, money is not everything. Smart people like to hang out with other smart people. Similarly, mediocrity comes in volumes too.

The Church Method

Building a great R&D is almost like starting a church: the trick is to keep your "business types" in the basement and, most importantly, - pick the right God. Lisp or Haskell will probably work. Put it up on a banner real high! And here they come: your high quality parishioners... They will build you a highest quality Java-powered unbreakable billing system (or any stupidest data pumping software you may want) in no time. As long as you let them show up to work at 11am and worship their God as much and as often as they wish. And no meetings, of course. Just don't put "Java" in the job description and you'll be fine.

Those who are terrified by total absence of meetings are worried for a very good reason. If you do not have much to do in such meetingless environment, maybe your position should... (it is always hard to call someone else's baby ugly) ... not exist to begin with?

The Internet Approach

In fact I can propose even more radical way of building something great. Suppose you have money and you are looking for something "hi-tech" to invest in. You know what you can do? (Listen to this nearly anonymous advice from Internet, right?)

You can, using the church strategy described above, attract as many smart hackers as you can possibly find, put them all in one comfortable place and leave alone. No projects, no business people, certainly no marketing and "team building" bullshit. Just give them an opportunity to meet, co-exist and collaborate together. Give them computers and free beer. Give them Barnes&Nobles for life memberships. Give them cigarettes if you have to.

And I guarantee that a number of fascinating events will occur. First, this ecosystem of smart hackers will reject "false positives". Naturally, without any HR department or "project managers". They will be expelled by their superior peers and chased away. Then you will start seeing signs of self-organization and, finally - some bright sparks. Those will be semi-interesting projects here and there, probably one per engineer or two. Eventually the most interesting ones will gather followers and evolve further. Not-so-good ones will die off. And I bet, that given sufficient time, you may create something truly spectacular. Something that will revolutionize some markets or possibly create new ones.

Laugh all you want, but look at what Internet did. Well... it surely is responsible for many things, but think for a second about Linux phenomena. An operating system, especially as well featured and modern as Linux, is probably the most complex piece of software a mankind has ever attempted to create. The scary monster of corporate world, Microsoft, has miserably failed at it - they built just Vista and it took them 6 years! Yet an army of smart souls managed to self-organize and pull it off so seamlessly. The Internet only served as one "big comfortable room" that allowed all those processes I describe to take place.

On Commercial Innovation

But what if true innovation in a commercial software space is dead? That may very well be the truth. You know why? Because the coolest software projects, most of their code base, were written between 10pm and 4am. And those, folks, are not your normal business hours. Surely some code gets written and checked in before lunch. Remember the last time your browser crashed? That was probably it.