Dead souls from overseas

Today “s topic is how to lead offshore programmers. To make this discussion a bit more interesting, let “s go back in time into the first half of the 19th century.

The novel “Dead Souls rdquo; by the Russian writer Nikolai Gogol was published in 1842. At that time, landowners paid taxes based on the number of people registered with their properties. Often, landowners were taxed even for the dead souls after people would pass away. Guess what, one entrepreneur named Chichikov, started visiting landowners offering to purchase dead souls from them, as this would lower their taxes. Why Chichikov would need to have legal rights to these dead souls? C “mon, it “s elementary, Watson! He wanted to inflate his importance in the society by showing the large number of souls he owned, so he could take a large loan against them.

Now, by a magic wand, we are back in the 21st century. You are a team leader (a technical guy) on a project that includes both local programmers and an offshore team of Java developers. The boss said that there is no budget for hiring American programmers, so the management has decided to hire a large and well known offshore corporation called Shmata Consulting. You firm can hire three Shmata “s programmers for the salary of one American with the same skills. I “ve already written that things may not be as rosy as they look on paper, but here “s yet another twist to it. While technical leaders work harder as they need to find a substantial chunk of additional time EACH DAY explaining to the offshore team how to write code and fix errors, the managers of Shmata Consulting send their time shits (did I spell it wrong?) to your manager for approval. By now, you should be able to guess who these dead souls may be. You believe that three programmers from overseas are coding for your project, but the manager might be receiving (and signing) timesheets (yes, this is the correct spelling) of 5 people, and each of these souls was working their dead asses off putting 80 hours a week. Talking about cheap labor. Talking about Chichikov of the 21st Century. Two centuries ago Mr. Chichikov has founded the Dead Souls Movement, without even realizing how to do these things on a large scale. They did not have the Internet in Russia-1842, so his “crimes rdquo; sound like an innocent joke of a kindergarten boy.

Anyway, what “s the bottom line? Is there anything you (the tech lead) can do about it? Yes you can, namely:

1. Interview and hire each offshore developer personally. Phone tech interviews are OK. Do not agree on working with an offshore team that someone else has put together.

2. Ask your manager to show you the timesheets BEFORE signing them

3. Do not leave your work without giving assignments to each of the offshore developers. Remember, if you forget to give work to your local people, this can be fixed an hour later. But if you did not give the assignments to the offshore peers, you lsquo;ve lost a day because of the time difference.

4. Make a habit to have a quick 20-min morning conference call with that remote team of telecommuters (you can just dream of working remotely, aren “t you). Find out what are their issues. Do not postpone these meeting to the end of the week ndash; too much time will be lost.

These simple rules may prevent your project from being yet another failure with “cheaper rdquo; (but still inflated) cost. You may not like this kind of job, but at least you “ll know that you are in better a control of live souls, and if some little dead soul will sneak in, kill it again. You can “t get convicted for a murder of someone who was already dead.

Do we need to know this?

I like freedom, Java applets, and Sun Microsystems. But this Web site has to be closed for general public. The site shows you the aircrafts approaching and leaving airports. It’s like a terrorist’s dream comes true. Just click on the plane and you’ll see some details of this aircraft. The picture is shown with a 10-minute delay, but it does not take a rocket scientist to analyze what’s happening in the past to predict the air traffic for tomorrow.

I do not need to know this information. Who does?

More on Ruby success and other languages

I’ve received several emails as a response to my interview with Bruce Tate on Ruby. People keep mentioning features of the language that will help Ruby to become a mainstream language. But they usually forget the most important thing for the adoption of any language: the proper marketing. Just being a good language does not cut it. Java may be not the best language in the world, but it’s the best marketed language, while Ruby was not. The fact that ROR guys keep consistently shaking the boat have resulted in some adoption of the language, which is pretty impressive given that fact that ROR was not backed up or funded by such a giant as Sun Microsystems.

On the similar note, there is a lot of noise about AJAX, which has the same result: there is some adoption of this technology in the industry already. There is also a bunch of AJAX frameworks of beta quality out there, and one serious framework from Google called GWT, which can help AJAX survive for a while.

Adobe’s Flex 2 is yet another interesting player in the Web application development arena. This technology is of a professional quality, and I hope that Adobe will be able to make it appealing to the masses of the enterprise developers, which is the most important group of programmers. If a language is in demand in the enterprise IT shops, there are jobs out there. If there are jobs, people will study and use it.

Recently, I’ve been interviewing a project manager – a job applicant. I’ve asked him, “If you are starting a new IT project and can chose a programming language/platform to be used, what would it be and why “? He said Java/J2EE, beause there is a large pool of Java programmers to staff the project, and there are tons of third-party frameworks that can solve literally any task that may come up along the way.

Is English the best language in the world? Absolutely not. But it’s the most widely used language, and people learn it for pragmatic reasons without falling in love with it. As a matter of fact, these days lots of people around the world hate USA and Great Britain, but they study English anyway, because they like CNN, MTV, Playboy, computer books, shopping, and jobs available in these countries.

So all these new programming languages must reach some critical mass of followers, and the rest will happen automatically… if the language/tool is as good as promised.

A cool Firefox feature that sucks

Everyone is using Firefox tabs. Every morning I was routinely opening several tabs with my favorite pages. But now I found this nice little feature: open up the tabs you like and go to menu Tools | Options, and in the current Home section press the button Use Current Pages. Firefox will remember all current tabs and next time you start it, all of them will be opened automatically.

Here’s a bad side effect: if you’ll keep pressing the button Home, Firefox will replicate all your opened home tabs. Should have been a bit smarter…Actually, I just accidentally hit the Home button again, and changed my mind: THIS FEATURE SUCKS.

WTFM

If you know what RTFM means, you should be able to guess what WTFM stands for. If you don’t, here’s the polite version: Read The Freaking Manual. RTFM is a part of programmers’ jargon. For example, you’re trying to figure out how to write something in Java. You tried everything you knew, but it wouldn’t produce the expected result anyway. Ask your more experienced colleague for help, and s/he’ll tell you: RTFM. This means that may be it’s about time to open up a book and do some reading. We live in times of open source software, and this acronym gets outdated as there is no manual to read in many cases. That’s why I came up with a new acronym: WTFM, which is Where’s The Freaking Manual, or something like this. You should use it daily after spending hours trying to figure out how this freaking thing works and why it gives you this meaningless error message.

People who develop open source products do not write manuals for one of three reasons:

1. They believe that writing a geeky code is the right thing to do, and writing manuals sucks. Real programmers should be able to figure out how your creation works by using widely available dissasemblers.

2. They do not provide manuals on purpose: since you need this poorly documented software badly, you have no choice but hiring creators of this product as consultants. They can’t sell licenses, but can sell services.

3. They have no idea of how to properly market their software.

The last reason is “the most popular “. People have no clue that THE most important thing to do after creating your product is to tell the world HOW TO FREAKING USE IT. Things get exponentially worse when your open source baby should be used with someone else’s open source masterpiece. How you can not realize that people need write-ups on BEST PRACTICES for your software?

For example, there is a popular open source JMS transport called Active MQ. I decided to use it from a Web application running under Tomcat. I’m wondering if Active MQ crew have heard of Tomcat? Do you have to have a PhD to figure out that the chances are that Tomcat programmers will try to use it? I’ve contacted some people from Active MQ and they said that writing about integration with Tomcat is in their plans. I went even one step further and offered them to publish an article on this subject. This did not get them too exited, so I’ll consider another MOM provider instead. They just lost at least one customer.

Last year I went for training on some J2EE related software. The instructor Joe declared from the very beginning: “Welcome to imaginary Joe’s Enterprise “. Whe I tried to ask Joe some advice on best practices, he kept saying that we live in the imaginary Joe’s world and he did not encounter these issues just yet. WTFBPM? BTW, it stands for Where’s The Freaking Best Practices Manual?

But sometimes you see exceptions from the WTFM rule. At JavaOne 2006 I’ve attended the presentation by the creator of Maven, which is a build tool and a bit more. The presenter was wearing a shirt and a wool sweater on top and shorts and bare foot beach sandals below. I’ve heard about the California attitude before, but this was a bit too much for a conference presenter. I thought to myself, “This guy does not respect the audience, so he can’t possibly create any good software “. Sure enough, last week I had to learn Maven because my client uses it. I was very pleasantly surprised when I found not only a manual, but a free e-book on Maven 2. The software makes sense, and the book makes a difference.

So if you are about to release a new open source software, I have just one question for you: WTFM?

More on Zidane

A month ago I was watching the football World Cup final game , and did not like Zidane’s action. Then, he explained what has happened, and I can understand why he did it.

But here’s an interesting twist to it: a Chinise businessman has registered a trademark for Zidane’s head-butt. Business is business.

Flex 2: Before your application is loaded

I did a mini research on what “s happening under the hood when Flash Player 9 loads and starts a Flex 2 application. Since Flex 2 is still pretty young, there is not too many resources are available, so I “d appreciate any feedback.

The SystemManager is a main manager that controls the application window, creates and parents the Application instance, popups, cursors, manages the classes in the ApplicationDomain, and more. The SystemManager is the first class that is instantiated by Flash Player for your application. It stores the size and position of the main application window, keeps track of its children, such as floating popups and modal windows. Using the SystemManager you can access embedded fonts, styles and the document object. SystemManager also controls application domains, which are used to partition classes by security domains (see description of the ApplicationDomain class in Flex Language Reference).

If you “ll be developing custom visual components (descendents of the UIComponent class), keep in mind that initially such components are not connected to any display list and the SystemManager=null. Only after the first call of the addChild() a SystemManager will be assigned to them. You should not access SystemManager from the constructor of you component, because it can still be null.

In general, when the Application object is created, it goes through the following steps:

1. Instantiation of the Application object begins.

2. Initializes the Application.systemManager property

3. The Application dispatches the preinitialize eventat the beginning of the initialization process.

4. The method createChildren() is called on the applicatoin. At this point each of the application “s components is being constructed, and each component “s createChildren() will be also called.

5. The Application dispatches the initialize event, which indicates that all application “s components have been initialized.

6. The creationComplete event is being dispatched

7. The Application object is added to the display list.

8. The applicationComplete event is being dispatched. You application instance is ready to use.

In most cases, you should use the mxml tag lt;mx:Application gt; for creation of the application object, but if you need to write it in ActionScript, it is not recommended creating components in constructor – use createChildren() for this (for performance reasons).

As opposed to Flash movies that consist of multiple frames being displayed over a timeline, Flex SWF files have only two frames. The SystemManager, Preloader, DownloadProgressBar and a handful of other helper classes live in the first frame. The rest of the Flex framework, your application code and embedded assets like fonts and images reside in the second frame. When Flash Player initially starts downloading your SWF, as soon as enough bytes come for the first frame, it instantiates a SystemManager. Then SystemManager creates a Preloader, which creates a DownloadProgressBar and these two objects are watching the rest of the byte streaming-in process. What all bytes for the first frame are in, SystemManager sends the enterFrame for the second frame, and then renders other events. Eventually, the Application object dispatches the applicationComplete event.

You may say, why do I need to know what “s happening before my application starts? This knowledge may become quite handy. For example, you can create a fading splash screen with the image of your choice by substituting the standard Flex Preloader and the DownloadProgressBar objects with the custom ones. Ted Patrick from Adobe has provided a nice sample application that does exactly this: displays a splash screen using an image from a from a .gif file. While your splash screen is displayed, you can download some other system resources and/or libraries.

The application tag of this sample looks pretty straightforward:

lt;mx:Application xmlns:mx= “http://www.adobe.com/2006/mxml ” preloader= “preload.CustomPreloader ” gt;

Download the code of this application and you “ll see that the classes CustomPreloader that extends the DownloadProgressBar and a helper WelcomeScreen that loads the image and fades it away are also pretty small.

Here’s another idea. During the application load your ActionScript code may interact with the “outside world ” a.k.a. Web browser. The class flash.external.ExternalInterface has a method addCallback() that allows you to register an ActionScript method as callable from the container. After a successful invocation of addCallBack(), the registered function in Flash Player can be called by JavaScript or ActiveX code in the container.

One more. Your Application may need to load another application(s) from a separate SWF file(s). If you have to do it in ActionScript, you can use the class SWFLoader from the applicationComplete event.

The most important feature of the Flex 2 is that it “s an open and extendable framework. I “m accustomed to being in complete control with Java, and Flex does not tie your hands either. This is somewhat off topic, but since Flex Builder is built on Eclipse platform, it lets you extend its functionality by creating your own plugins. For example, here is a To-Do/FixMe plugin.

That’s all…for now.

How to form an opinion

I have an opinion on most of the events that are happening in the world. It may not be right, but at least I have one. Tomorrow, it may change 180 degrees, but at any given point in time I have an opinion.

To form an opinion, I use a simple formula : TRY IT ON YOURSELF.

Do not have an opinion on the Iraq war? Try it on yourself. Would you like your kids be recruited and sent to Iraq? Answer this question and you’ll have an opinion.

Do not have an opinion on homosexuals? Try is on yourself. Would you mind if your kids become gay or lesbians? Answer this question and you’ll have an opinion. Do not just say it’s good or bad: answer the question.

What about Israel/Hezbollah war? Try it on yourself. Imagine that two US marines were kidnapped at the Mexican border and bombs from Mexico are falling down in your local town. Would you have an opinion on what’s a proportional response would be?

Need an opinion about races? Would you like your kids to marry a person of black/white/asian/hispanic origin? Do not pick your own race, answer this question, and you’ll get an opinion.

But be honest. Applying all these events to your family may generate a different opinion than watching CNN headline news.

You do not always have to let other people know what’s your opinion is though. For example, I applied my formula to form my opinion on homosexuals and human races and wrote a blog on it, but has never published this blog. Why? Because these are the topics (religion is another one) that are very difficult to write about without offending someone. So let’s wait for better times…

Blogs work really well in this regard. Only people who want to know my opinion read my blog. Once in a while links to my blogs are used by third parties in mass mailings, so it seems that you are kinda forced to know what my opinion is. I agree that it’s annoying, but as I stated in the header of my blog, since I do not ask anyone to disseminate my blogs, this gives me a peace of mind.

Whats your salary?

In the USA, your salary is the most confidential information. Should you even answer the question about your salary? Never. People who are entitled to know this number already know.Only your boss, HR and, sometimes your spouse know this magic number. There “s an unwritten law: never ask your colleagues or even friends how much they make. There is another law: do not say how much you make just to impress people. There are a couple of simple reasons why this is never a good thing to do. Let “s consider several use cases.

Use Case 1. Joe and Larry are colleagues working for the same company, they have great relations and perform similar duties. After having a couple of beers at the corporate party, Larry says, “Joe, you did a really good job at this tough project with unreal deadlines. I hope they “ve compensated you for all these long hours. rdquo;

Joe is flattered, and says “Yes, I got an extra $10K as a bonus rdquo;.

Larry answers, “This is really cool rdquo; hellip;and gets upset and pissed off. Two months ago he “s been working really hard on a similar project, but did not get anything other than “Thank you rdquo;. Larry thinks that it “s unfair. The climate in their team slowly gets worse and Joe and Larry do not go for a beer any longer.

Use case 2. Many years ago Sandy and Max have graduated from the same college. Now they work for different firms but their families often spend time together. During one of such gatherings, Max asks, “Sandy, we are both Java programmers and know each other for years. I “m thinking of making a move with my career. What “s the realistic salary I should ask for? rdquo; And Max makes a big mistake by saying, “Well, You know my skills, and I “m making $80K working on a time tracking application for our Human Resources department. rdquo; Sandy spent years doing his PhD research and works now on complex algorithms in a lab funded by government. He makes $60K a year, which is good enough to pay their bills. After the party, Sandy “s wife Mary found out about Max “s eighty grand. From that day she could not sleep at night. How come? Max has hardly graduated, while my Sandy was always a genius hellip;Sandy and Mary got divorced in a year.

Use case 3. A firm puts an ad with a job description that fits your profile advertising a salary range $70-$80K a year. Your current salary is $68K, you feel that you are underpaid (even though there is no such thing as “underpaid rdquo; people), and decided to apply for a job. You meet with an HR person of this company, and they ask about you current salary. You should answer: rdquo;I “m looking for a more challenging job, and the position you “re trying to fill is exactly what I want, I “m qualified for this job, and will be happy to work for you for $80K a year rdquo;. Do not reveal your current salary. If you need to fill out a job application form, leave this field blank. In half of the cases, you “ll be able get away with this. If not, oh well, look somewhere else. Most likely they won “t pay you eighty after figuring out that you “re making sixty eight. This employer knows the qualifications required for this job, they are well aware of prevailing salaried paid for similar jobs by other firms, so their only concern should be if you can do this job and not how much money you made before.

Use case 4. You are looking for a job and your recruiter sends you to a client company for a job interview. The agent knows what are your salary requirements. The potential employer asks you about your salary hellip; Do whatever you can to not answer this question. I do not know who “s the author of this rule, but it “s a golden rule of salary negotiations: “The first person to mention a number loses “. Remember, that salary is just a part of the compensation package. Here “s your mantra: “I “m open for any fair offer. If you decide to hire me, I “d rather consider the entire compensation package than a base salary rdquo;. Usually, your agent will be able to negotiate a better deal for you. Let them do their job. They have established relations with this client and know how to approach them in this particular matter.

Use case 5. You are a successful software developer, you salary grows faster that average in the nation. You “ve managed to increase your salary from $60K to $120K within the last five years. This is quite an achievement. You feel important and want to teach other people how to manage their careers. Your body was craving for a couple of Wows, and you “ve shared you success story with your neighbor. He said, “Wow rdquo; hellip;smiling inside as he was consistently making $150K during the same period of time. Luckily, your neighbor would never reveal this number. Your self esteem is saved.

Use case 6. Alex and Lisa were going out for two years, and finally Alex decided to propose. By some idiotic rules, for such occasions young men are buying expensive diamond rings. Alex has purchased a $15K diamond ring, and proposed to her. She was so happy and said Yes. In a couple of months, she asked Alex what was his salary. She caught him off guard and he said: $60K a year. Lisa was a student studying accounting. She quickly put two and two together and decided that she can “t live with a man who can spend $15K in a ring having such a modest salary. I do not remember if she has returned the ring though.

Use case 7. You are leading a small team of software developers. Marsha is in her 40th, and she’s with the company for 10 years. Ashish, 27 is one of these sharp god-like programmers who programmed 80% of the project. When Ashish found out that Marsha’s salary is $80K and his is only$60K, he decided that it’s not fair and immediately started looking for a new job. He did not know that only because Marsha’s connections within the firm your group were given this project in the first place,and Ashis had the green light when the business analysts input was required. Yes, Marsha was not as good of a coder as Ashish. So? Every person tends to overestimate his/her contribution to the success of the project. And you as a project manager better make sure that they do not start comparing their compensation with other team members.

Use case 8. Somehow Gordon figured out that Frank is making more money than him. During the annual review, when he found out that his salary will increase “only ” by 4%, he said to his manager, “How come, I am not worse than Frank but he makes a lot more than me “.

Yakov, the manager, said that he’d take a look at this situation. In about a month, Yakov invited Gordon in the office and said, “Our department is not doing that great, we’ve had a series of budget cuts, and even though you are a great asset to our group, I’m going to have to let you go. Sorry, man! ” Of course, this was not the real reason: Yakov did not need a bad egg in his team.

Never use someone’s salary as a reason for your raise. You think you are underpaid? Update your resume and hit the job market. Can’t do better than now? Sit down and shut up. It’s a bit rude, I know. Welcome to the real world.

People who live in the USA for a while avoid the question about salary by all means. But if you run into a newcomer who may ask you directly “What “s your salary? rdquo; Just say, rdquo;Even my wife does not know this number rdquo;, and give them an American smile.

I “d love to hear from your about other use cases proving me right or wrong.

By the way, do you want to know how much I make? Sorry, it “s a classified information and you do not have the required clearance. But let me just tell you ndash; it “s never enough.