What makes a software company successful? A book in 1987 gave the definitive answer: People
Specifically it’s software developers, but of course also the testers, analysts, project managers, and operations staff that surround them. And let’s not forget the bosses that manage them.
But how do you get (and keep) good people?
Microsoft started the trend of spoiling them with cokes, games, bean bags, flexible hours, etc. Or rather, they were famously the first company to continue the laid back atmosphere once they became a “real” business. Although that atmosphere has become largely artificial, and many people have realized that the primary motive has been to keep them in the office — and lots more have moved on to Google where the perks are slightly larger and the hipness factor is slightly higher.
Hipness is another strategy, but it’s ephemeral. Google had it for a while, but it’s fading. Apple has always had it for a small (but in recent years, rapidly increasing) minority. Netflix had it for about a year. But that withered with their stock.
Stock options were the supposed de facto solution, but it turns out that that really only worked with the first consumer software companies in the early 1980s — Microsoft, Oracle, etc. It looked like it was continuing with Netscape and into the dotcom boom, but ask any developer except Jamie Zawinski how their Netscape (or Amazon, or Pets.com) stock options turned out.
More money is the age old solution. Stock options are just another way of saying more money, but it turns out that most programmers want about $120K salary (varied based on the cost of living in their preferred location) and wouldn’t know what to do with more money. And would rather tell a job they don’t like to stick the extra few bucks if they’re not happy.
Google knows another secret about keeping developers happy — and that’s freedom. It famously gives them a half day to work on a (corporate approved) open source project of their choice goes a way towards keeping them happy.
Joel Spolsky thinks what they really want is a great work environment with big monitors and fast computers and private desks and hip furniture — but it turns out that the hip furniture is really what he’s selling. People work at Joel On Software to be associated with someone they think is hip, who treats them like their hip. Lots of people like that.
So keeping them happy is what’s needed. Pretty much all the above described methods attempts described above: Money, Perks, Coolness, Creative Freedom.
In fact a lot of great programmers would be happy in a closet hand punching cards on a 386 — if they could do their own thing. Creativity is what keeps them.
But not everyone is necessarily a top-notch programmer and self-motivated — or is creative. What do you do about the rest? Not everyone can afford to hire the best of the best and give them free time and toys and food and drinks and cool offices.
You train them. Developers like to learn. They like to learn on their own, but they also learn at different paces. They’re mostly introverted (using the old binary labels, not the newer pop-psych quadrants). They’re often frustrated by the way they end up having to do things because they don’t have the time to figure out how to do them better. They know there are better ways are out there, but they don’t always have all evening to study them out in their own time.
They’re either too busy playing pinball and foosball in the cafeteria waiting for the automated tests to approve their checkin so they can go back to their quiet office to play EverCraft or whatever the cool kids are playing these days — or they just want to spend some time with their own wife and kids, since 1990s Microsoft stock options made marrying a poor lonely geek socially acceptable.
But you can make those average developers better, some of those bad ones less dangerous, and even some of those genius ones better by training them. Everyone knows its hard to recruit and keep good developers, but few know the secret is to train them. To make them.
In the last 1990s, corporations learned something important. There was a massive shortage of programmers — and suddenly a huge demand for more programs. That hasn’t slackened. But they made a critical mistake. Afraid that they would lose their investment in training them to a startup competitor, they cut training budgets. They became wary of letting them try new technologies. They thought by keeping them ignorant, they could keep them from being stolen away.
That didn’t work out so well. But companies big and small still have an almost allergic reaction to training. I’m not talking seminars — I agree that the money spent sending developers to fancy offsite seminar training sessions was better spent on sending them to conventions where they could hang out with other geeks and get swag — but that’s not really training, that’s a vacation with moral support. There they could hear how programmers at other companies faced the same frustrations they did and hear lecturers say there’s a better way and nod their heads and buy their books.
Training doesn’t have to be expensive. In fact the best training is mentoring. Senior programmers don’t like to train junior programmers, but if you can get them too, you can rapidly increase their productivity. Like 5x. Like turning someone just out of college who doesn’t know what version control is and still thinks in a hybrid of BASIC and Microsoft Visual C. into the equivalent of a 5 year J2EE veteran in 1 year. Maybe even without the cynicism. (Just kidding, cynicism is the most valuable part of the training.)
Training is great in 2 more ways. Learning naturally develops into exploring. And once people start exploring (even if they’re just reinventing the wheel) they become creative. And mentoring naturally develops into leading.
You hire MBAs or oceanography majors to manage your programmers because you say you can’t find any senior programmers with leadership skills? Get them mentoring. Teaching new recruits who can optimize hello world in assembly but can’t create a hello world webapp in Ruby to be cynical architects is just what’s needed.
And here’s a little secret. You don’t have to hire CompSci majors for Carnegie Mellon to get decent programmers. You can turn anyone who understands algebra and can craft a coherent essay into a decent programmer with a year of training. And you can pay them a lot less than it would cost to send them to 4 year education at a state school. At least at first. After 12 months you might have to pay them the market rate. After 24 months, you’ll have to allow them creativity. After 48 months you’ll have to give them a chance to lead. But by then, they can start mentoring their peers who just got out of college.
And they will be loyal. People like training, they like creativity, and they like advancing their careers. They like money and perks and hipness too, so don’t skimp on that either — but you’ll be successful, so you can afford that.