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.

Wednesday, November 19, 2008

The Interview Process

What never ceases to amaze me is how many young engineers don't realize that a job interview is a bi-directional process. While it is true that the man with the gold makes the rules and you are attempting to convince the man to throw some of the gold your way, it is equally true that (assuming you are a good engineer who takes his role seriously) you are getting ready to contribute something more valuable than gold; namely your time. In fact in many cases you are bargaining more than half of your waking life for some of the gold and given that time is more valuable than money, the prospective employee is often dealing from the incorrect position.

It is often the case that companies during the interview process look for such intangibles as culture fit, aptitude, character references, credit scores, biological tests and a background check. It can be a long and difficult process which is OK, but in many cases it is a uni-directional process which is not OK. The prospective employee at every step during the interview process should be asking such questions as 'do I want to work here', 'how good is this company', 'does this company share my core values', 'has this company been a good corporate citizen', 'is this employee I have been subjected to someone I would enjoy working with', etc. It is also fair to request the same information from a company they have requested of you.

If a company requests a credit score from you, it should be fair to request a financial statement from the company. If a company requests a list of three references from you it should be fair of you to ask for a list (and associated contact information) of three former employees from the company, after all, if the company can't provide three former employees who have positive things to say about the company or if all former employees are happy to be former employees that says something.

Whenever I interview with a company for a position which is a replacement position (IE I am replacing someone who left as opposed to a newly created position) and they ask me why I left my previous job, after I answer their question I usually ask why the individual who I am replacing left. In a lot of cases the company will want to know why I have changed jobs so frequently (the average life expectancy of a software engineer by the way is somewhere around 18 months) and after I describe why I left various positions they are interested in, I typically request of them the average stay of an engineer while in their employ. Though the interviewer is usually surprised by this sort of thing, I am sure they are no less surprised than I am when they ask me for such strange things as a background check or a credit score; after all, what could my credit score possibly have to do with my job performance, but the average term of their former employees is relevant for me to deduce what my anticipated employment term would be with them.

Anyway, my point is that the interview process is a bi-directional process, look before you leap, ask the same of a company that it asks of you and don't give away the farm because your life is more valuable than money and in many cases it is piece of your life you are exchanging for gold.

Sunday, November 16, 2008

Premonitions

When I was young my mother would say silly things like 'I had a premonition last night about your uncle so and so' and she would actually call uncle so and so to make sure he was all right. Even at 8 years old I knew this was foolishness and I have been comfortable all these years knowing that sort of thing was nonsense right up until yesterday.

Two nights ago I had a terrible dream where one of my sons who appeared to be about 5 years old or so was at the beach with myself and his mother. We were swimming and he got pulled under the water by the current. I tried frantically to save him but I couldn't find him; he was lost in the ocean. I woke around 5am and couldn't get back to sleep because it worried me so much. I called my youngest son who was vacationing in my condo on the beach in Ft. Lauderdale at the time and warned him and his girlfriend several times not to swim in the ocean because of the rip tides.

Later I opened my email and learned my nephew had been in a motorcycle accident and was in critical condition in the hospital. It was not clear he would survive and if he did he most probably would be paralyzed from the neck down. Later that evening my second youngest son was in jail for domestic battery as he had downed about 10 shots of vodka when he saw a picture of his cousin in a coma in the hospital and I guess he decided to take it out on his girlfriend. In an instant both my son and nephew had been taken from me but what is so unsettling is the premonition I had the night before and how crazy my mother was for believing in that crap.

Saturday, November 15, 2008

My First Blog

Not having a blog is kind of like not having an iPhone; I can't afford to be that cool. In the case of the blog it is more a scarcity of time than money, however, after having been settled in to my new job for some time now and not having an extremely long commute, I finally have some spare time to muse on random thoughts so here we are.

Today my topic is parental responsibility. Typically I will muse on technology (specifically coding), however, this morning I received a disturbing email from my ex sister-in-law. It seems my youngest nephew was recently involved in a motorcycle accident and it is not clear if he will survive and if he does he will be paralyzed from the neck down.

While it is a well known fact that my youngest nephew is a bit of a hellion it is also my belief that he is this way because of a total breakdown in parental authority on my ex sister-in-laws behalf. The last time I visited with her, her egg sucking hounds refused to get out of my bed regardless of how many times I threw them off. She would not let me put them out of the house so I ended up sleeping with the flea bags. She also allowed both my nephews to have their friends over and spend the night drinking (neither were 18 at the time). When the night's partying was done their friends dove home, even though I tried to make her drive them home. When I told them I would drive them home they refused and DUIed their way back to wherever they came from. The bottom line is a little common sense goes a long way.

I hope my nephew survives and by some miracle recovers enough to lead a happy life but it is not looking good. I realize accidents happen but sometimes as with luck, we make our own accidents, and much like with common sense, a little parental authority goes a long way.

BTW be sure to visit my friend who inspired by blog's name. He can be found on this blog site under the name 'The Secret Life of Bears' http://secretbear4.blogspot.com/.