Outsourcing

“With Bloglines, I had an accountant, at least for a good part of it, who was fairly cheap. One of the hassles of ONElist was that I was the one manging the books the first year, as well as answering the 200 support emails every night, as well as doing all of this other stuff. I guess I’m torn with how cheap do you want to go with a startup. Having an accountant is kind of a nice frill.
I also think a lot of people don’t know about all these outsourcing sites, which are absolutely wonderful.
So, if I wanted to put together a presentation and I needed a couple of graphics, I put up a proposal on ELance and ended up working with some lady in Australia, who turned things around in 5 hours, for $40.” — Mark Fletcher (Founders at Work)

Outsourcing. Everyone talks about it. Some are scared by it.

When is outsourcing useful?

Let’s start with the negation: “When is outsourcing not useful?”. There’s an easy mantra to this question:

Do not outsource your expertise!

What does this mean? If you’re developing software do not outsource software developing!
If you’re producing chocolate do not outsource chocolate production!

When it’s useful?

Some people may think: “When I outsource X then it will never reach my requirements.” Attention! If you are competent in doing X, sure do it. Otherwise, choose wisely if you should do it.

I’ll take the accountant example:
An accountant will require two hours to do your task.
You will require five hours to do the same task.

Ratio: 2:5 respectively 1:2,5

Even if the accountant will cost two times more than you earn per hour, he will be cheaper. You will save money and keep your nerves. Great!

Bugs? Bugs!

“Code Quality is very low on the list of things that matter.”– Jeff Atwood (Hanselminutes #135)

 

“You have nothing to do in Software engineering if you didn’t ever code.”– Markus Völter (SE Radio #112)

via blog.jonasbandi.net

What is code/software quality?

There are a lot of things, e.g. amount of bugs, documentation or implementation of requirements (more information: wikipedia.org).
You know quality cost time but also can save time (readability).

How to improve quality?

A great base builds Joel’s Test. Covering fast iterative development steps, source control, bug databases and testers. Moreover there’s a mantra which is useful “before writing new code fix the (known) bugs“. It’s easier to fix bugs on the code you’re written two minutes ago than on a code you’re written two years ago.
A good spec helps you not to lost the overview. You can early focus on security and availability. Together with the other points you can guarantee a better quality of your products.

Not all bugs should be fixed

 

“But how do you distinguish between bugs that users are likely to encounter, and bugs that users will probably never see?”– codinghorror.com

If will mention some very serious bugs you must fix. You should also fix most bugs. There are some that aren’t worth fixing. A example is a bug which only appears on the third Sunday in a year which is a prime number and causes a little message box saying “Error 0: No Error”. It’s exaggerated of course.

  • Severity: When this bug happens, how bad is the impact?
  • Frequency: How often does this bug happen?
  • Cost: How much effort would be required to fix this bug?
  • Risk: What is the risk of fixing this bug?

codinghorror.com

Also related: My life as a Code Economist

What’s certainly worth fixing?

 

Zune’s leap year bug (2008)

What happened? All Zune players stopped working.

twitter’s login algorithm (2009)

What happened? Twitter’s main account was hacked because they haven’t implemented a barrier against aggressive password trying.

Bufferoverflow in Unix finger daemon (1988)

What happened? A function wasn’t well programmed so it was possible to get access to every computer using Unix finger daemon.

Year 200 problem (1995+)

What happened? The year wasn’t displayed correctly.

Shrink wrap, internal, embedded, games

The importance of bug’s nonexistence varies between these genres. Embedded systems require bugless code mainly because it is embedded and you can’t upgrade the software so easily. Shrink wrap should work fine most times. If it crashes once a month it’s acceptable. Internal systems and games are even less demanding.

Release – Fix – Release – Fix – Release

This is a recommendation by Guy Kawaski (Art of the Start).
It’s a double-edged sword. You, as an entrepreneur, get fast feedback from real customers. Your customers may scared off because your product is buggy as hell.
If you work as long as there are no known bugs you may will never release your product. It’s a balancing act. Do not release too early and not too late.

Bad programmers, good programmers

The whole story begun with a post on the joel on software board.

“After reading the disgruntled posts here from long time programmers and hearing so much about ageism and outsourcing, I’m thinking of leaving the industry. What is a good industry to get into where your programming skills would put you at an advantage?”– Bob

 

Our pay is great. There’s no other career except Wall Street that regularly pays kids $75,000 right out of school, and where so many people make six figures salaries for long careers with just a bachelors degree. There’s no other career where you come to work every day and get to invent, design, and engineer the way the future will work.

Despite the occasional idiot bosses and workplaces that forbid you from putting up dilbert cartoons on your cubicle walls, there’s no other industry where workers are treated so well. Jesus you’re spoiled, people. Do you know how many people in America go to jobs where you need permission to go to the bathroom?

Stop the whining, already. Programming is a fantastic career. Most programmers would love to do it even if they didn’t get paid. How many people get to do what they love and get paid for it? 2%? 5%?”– Joel Spolsky

Stopover. Somebody is anxious about outsourcing. Joel put the advantages in the foreground: great pay; invent, design, engineer the future; love and get paid.
I’m totally agree on Joel’s opinion but what’s about the “normal” programmer who’s programming for the paycheck?

“There just aren’t enough people in the world to find a passionate person to perform every single task. And I’m not saying that grossly incompetent people shouldn’t leave the software industry, but I have known plenty of good developers who want to leave work and not think about programming until the next day. […]
So to say that people who don’t love programming need to find new careers, well, that is just silly.
“– Justin Etheredge

Stopover. Justin says that not everybody is passionate in software industry and that he know great developers which work 9-to-5. Moreover he says that there are enough jobs.

Programming: love it or leave it. […] I’m talking about the Daily WTF crew. People that actively give programming a bad name, and you, as their coworker, a constant headache. […] But one of the (very) few bright spots of the previous bubble was that it weeded out all the people who didn’t truly love software development. […]
The only people left applying for programming jobs were the true freaks and geeks who, y’know, loved this stuff. […] I mean this in the nicest possible way, but not everyone should be a programmer. How often have you wished that a certain coworker of yours would suddenly have an epiphany one day and decide that this whole software engineering thing just isn’t working out for them?”– Jeff Attwod

Stopover. Jeff talks about the problems bad programmers causes to great programmers, to the project.

Outsourcing

What are the reasons for outsourcing?

  • “Cost savings.
  • Improve quality.
  • Knowledge.
  • Operational expertise.
  • Staffing issues.
  • Reduce time to market.”

wikipedia

So, imagine you’re a software company with great developers, would you outsource anything and why? Except from cost savings time reducing could be a point. But, you know one of the most important facts of The Mythical Man Month.
Nine women couldn’t bear one baby in one month.

So what’s about a company which hasn’t so great developers and these developers working in the “corner programming”? There are easy to outsource. They may not achieve the requirements and they worse than Indian programmers. Bye, bye.
One book which is suited for this topic is My Job Went to India: 52 Ways to Save Your Job by Chad Fowler.

Great and mediocre programmers

 

“I still think it’s more efficient – this is just an old Lisp programmer’s standard way of thinking – if you have two really good people and a very powerful tool. That’s better than having 20 mediocre people and inefficient tools. ArsDigita demonstrated that pretty well. We were able to get projects done in about 1/5th of the time and probably at about 1/10th or 1/20th the cost of people using other tools.”– Philip Greenspun (Founders at Work)

“OK”, you would say, “but these really good programmers are really well paid.”

“A great programmer might be ten or a hundred times as productive as an ordinary one, but he’ll consider himself lucky to get paid three times as much.“– Paul Graham

 

Jobs. Jobs. Jobs?

The industry is searching. Many positions are open. In the year 2007, 43,000 positions were unfilled. Many projects are dying because they hadn’t enough professionals. This will may decrease but I think you’ll find a job with a college degree.

(What’s So Funny ‘Bout) Quality, further education and passion?

We’ve seen great developers are more productive, they make better software and they are happier. But they’re rare. The problem isn’t new. Makers (Architects, hacker, painters, writers, composers) need freedom for masterpieces. I think that works great with really passionated people. But the others may be overwhelmed and stop working semi productive. It’s a problem with the ratio. Eight great developers and one mediocre one will work fine. The great programmers will push the mediocre one. A ratio of one great developer to ten mediocre will be harder. The great developer can improve the working process but only if he/she really wants to, otherwise she/he simply changes the working place.