Wednesday, December 17, 2008

My Anti-Outsourcing Rant

I have outsourced before and let me tell you; it is not any cheaper in the long run. When an employee is within walking distance the message can be delivered quickly and succinctly, however, when you manage a group of remote engineers you must spend a significantly longer amount of time in the specification phase.

Most projects have a pre-ordained life-cyle. You can pull in any phase you want, but you will end up paying more elsewhere. For example say a class of project typically takes 12 months to complete (and we'll assume we have arrived at this number empirically). You might spend 3 months documenting requirements, 3 months designing the solution, 3 months implementing the solution and 3 months debugging the solution. If you want to pull in the implementation from say 3 months to 1 month, that's fine, but my experience shows you will just end up adding 2 months to the debug/QA cycle for a net delta of zero. The same goes for pulling in design (you'll pay more in implementation/debug, or if you want to pull in specification requirements you'll pay more downstream), etc. Most projects tend to fall into basic categories and various categories of product just seem to have a standard duration, like it or not, and so outsourcing just tends to require more time to be spent during the requirements specification and design phases.

There is an old saying (I think it comes from Brooks in the Mythical Man Month) that you can put 9 women in a room but you won't get a baby in a month. It will still take 9 months because that's typically what that project category requires. In the case of dumping more and more resource on a project there is resource communication and interface overhead which adversely affects productivity, otherwise any project could be done in one day (or more absurdly, one minute) given enough resource, but as we all know via common sense, it just doesn't work that way.

Anyway, I have attempted to manage remote engineering organizations unsuccessfully in the past so this is my little rant on outsourcing, from an attempted non-polemic perspective.

Sunday, December 14, 2008

A Rare Weekend Off

This weekend I had the opportunity to take both days off (a somewhat rare occurance these days) and as is usually the case I tried to watch a couple of decent movies. I got lucky. Saturday I caught the original '3:10 to Yuma' with Van Heflin and Glen Ford, and Sunday I got to watch 'Rumble in the Bronx' with Jackie Chan. I strongly recommend both. Early on Jackie Chan was a true martial artist and some of the scenes (especially the fight in the appliance store) are inspired. You gotta love a guy who can kick your ass with household appliances.

'3:10 to Yuma', while not the greatest western ever produced is still a solid entry, representative of the genre. Glen Ford as always does an excellent job while remaining true to his stoic self. The same may be said of Van Heflin, one the most unassuming leading men in Hollywood at the time. Together they produce an entertaining product which stands the test of time. I have not seen the remake with Crowe and Bale but I don't see how it could be any better, and from I've read they changed the script significantly which would annoy me more than entertain me.

Today as are most Sundays this time of year is football and beer day. The wife usually leaves me alone and goes shopping so in general life is good. I am looking forward to going back home to South Florida where the tides are high and the grass is green (sorry for the plagiarism Mick) for the month of January. Manhattan is a very dreary place in the winter.

Tuesday, December 9, 2008

Rambling on Multi-Lingual Programming

Having been in the software development business for nearly 30 years I have been exposed to many different languages. I will attempt enumerate them here but I am sure I will leave out a few.

(1) Assembly Language
(2) C
(3) Fortran
(4) Pascal
(5) COBOL
(6) EDL
(7) C++
(8) Java
(9) Perl
(10) Python
(11) Lisp
(12) Javascript
(13) Ruby

Over the past 5-10 years, however, I have only worked with C, C++, Java, Perl, Python and Javascript (I have played with Ruby). What amazes me is how I continually learn new things which are not necessarily new, just new to me. I am sure if I paid more attention in my various college classes I would not be surprised so frequently, but it is hard to learn something if you are only given a few weeks or months to learn. It is also the case that real projects tend to increase comprehension more than educational exercises.

Today I discovered the concept of a coroutine. It is not so surprising to me that I did not know about this as much as that I discovered the original work done on this concept came out in 1963. The same may be said of closures which are still a relatively new concept to me though it should not be as I have programmed in Lisp before and was well aware of work done by Alonzo Church back in the 1930s.

Peterson's algorithm (which many software based mutex implementations are based on) is also a relatively new concept as I first heard of it in 1999 (remember I have been writing code since 1979) but really had no use for it until multi-processor machines became more accessible. In the old days a simple 'test and set' operation would suffice.

What concerns me most though is the fact that if a programmer is versed in a variety of languages it becomes difficult to often remember the exact syntax of a specific language which is why when I interview a candidate for a job I tend to focus more on the problem solving skills and general knowledge rather than the language specifics. I hate interviews where they ask odd questions like how many bytes does an empty C++ class occupy or what will x+++++++++; evaluate to (my answer is it evaluates to the guy who wrote it getting fired).

Isn't it more important an individual knows what a mutex is and what it might be used for rather than what **x++++++; might evaluate to? Isn't it more important an individual knows what the concept of an associative array is rather than the specific syntax like %$x? To me, a coder who knows its a hash in Perl, a dictionary in python, a map in Java gets it regardless of language.

In the end most languages support most concepts, some better than others. I think if a coder knows (or claims to know) about 3-4 different languages it is more productive to ask about the relative strengths and weaknesses of each rather than syntactically oriented questions. I also love trick questions. One of my favorites is to ask a Java coder how Java supports closures, and more recently to ask a C coder how C supports coroutines.

Sunday, December 7, 2008

The Ad Words Game

Several friends have been recently been releasing websites (as well as myself and my retail site http://www.network-accessories.com which has been open for business around 9 months now) and as the norm they have been trying out various strategies using basically Google ad words. Having not only played this game myself in the past but also discussing the various aspects of said game with several friends who have also done this sort of thing I have come up with some basic strategies for dealing with the problem.

First let me frame the problem properly assuming you are trying to sell a product or service on-line; it is not how many folks visit your site, it's how many actually bought. So, for example, if I pay $100 a day in ad words fees and I get 1,000 visitors a day but nobody purchases anything then I have basically thrown away $100 a day. If, however, I pay $50 a day in ad words fees and I get 1 purchase for $100 then I have successfully spent my money. This concept known as conversion rate is well known to most. What I will briefly explain is just what a good conversion rate is considered.

Conversion rate is based on anticipated sale and that anticipated sale may be over the lifetime of the site, so for example, if it costs me $100 to convert a customer who only purchases $25 worth of product from my site on first visit that is OK since that customer has the potential to buy again and again from my site, so even though the initial conversion rate is negative we can amoritze that customer across the life of the site so if I feel the average customer will purchase $500 a year of products from my site then this is a good conversion.

Obviously the game is won and lost in this example on proper calculation of the various metrics which go into site revenue generation. Now the picture gets a little more cloudy if you are a virtual site who makes money by redirecting traffic. Since I do not deal with these types of sites (all my sites provide a real product or real service) I can't really comment on how to best spend your ad words budget, besides from my perspective, once I get you to my site the last thing I want to do is send you away from it.

I do know that I can offer the following advice ...

1. Use yahoo or ask.com ad words first to test the waters as they tend to be cheaper.
2. Once you have a campaign or two you are comfortable with then switch to Google.
3. A good conversion rate is somewhere between $25-$50 per conversion where conversion means a customer purchase (of course if the average purchase is over $1,000 then a higher conversion rate is acceptable).
4. There are a bunch of alternatives to Google, many which even allow you to choose the sites your ads will appear on.
5. The obvious natural search trick is to get listed on as many high quality sites as possible (IBM, Microsoft being two examples of high quality sites)
6. Link exchanges tend to hurt natural search from Google.
7. Blogs and posts help a bit but not as much as is believed.
8. Trade Journals and association based websites are excellent back links (a link from a local government site as an approved vendor is a valuable back link)

Obviously there are many more tricks and tips but that is all I have time for today as the wife requires me to take her shopping. Take a look at my friends at http://www.zipytax.com to see a web site which provides a service but offers no loud marketing or fancy graphics. Maybe this will become the wave of the future. Also don't forget if your looking for things to do http://www.ontheroadevents.com (alternatively http://www.mister-ticket.com) is an excellent place to find meetups and events in your area.