You can master Java within two months

There is a number of developers that know some programming language, but adding Java and Java EE (formerly J2EE) to their resumes could increase their chances to find a better paid jobs. For example, I’m dealing with lots of Adobe Flex developers, and about half of them have no or little understanding of what’s going on the Java servers, which “somehow” respond to the requests of the well done rich Flex UI. There are legions of low-paid Web developers who know PHP and nothing else.

If only they knew Java…But they often just can’t get off billing to learn Java. Besides, what does it mean to learn Java? Learning the syntax of the language? There’s no demand for people who just know the syntax of Java, or as a matter of fact any other language. So what to learn? The Java ecosystem is huge – there are lots of technologies and frameworks. People get scared. People don’t want to boil the ocean.

Employers are looking for people for solid understanding of Java and Java EE  technologies. So if you are looking for the guidance and are motivated, enroll in my online training class that I’ll be teaching starting from March 8.  The classes will take place on Tuesdays and Fridays from Noon to 2:30PM New York time (GMT-5). Resident of the Eastern states of the USA can take a long lunch twice a week and attend these classes without leaving their offices. For people who live in Europe, India, or Middle East this is an evening training (sorry Australia, Japan, and China). You’ll be surprised, but not every person who lives in India knows Java yet.

It doesn’t matter in which country you live now, as long as you have stable Internet connection (e.g. watch American youtube videos without pauses), you may benefit from this training.

You’ll hear my voice and see my computer screen. You’ll be using the fresh Java Tutorial that I wrote for Wiley. You’ll be able to ask questions and do the homework.  Visit this Web page for  the program description and registration.

Interested? Then enroll in this class and get in charge of your career.

Yakov Fain

Hacking or Design Patterns?

Earlier this year, I made a statement defending hacking in an interview for Oracle. Yesterday, I found a thread on where java developers were sharing their view on the subject. In this blog I’ll take the same two quotes there ignited some arguments and will try to explain my point of view.

1. “Recently, I’ve been running a seminar for a small group of Java developers. Several times they’ve asked me, ‘Is this code an example of MVC pattern?’ I got the impression that implementing MVC had become an end in itself. Using Design Patterns is not a dogma. Just write the code that makes sense. Not everything that makes sense has a named design pattern.”

2. “Abusing design patterns is not always the fault of Java developers. I find the approach used in the enterprise software shops similar to medicine in the US. In my opinion, lots of doctors here practice ‘protective medicine.’ They are trying to protect themselves from malpractice law suits. Enterprise managers and tech leads also try to minimize the risk introduced by lower-skilled developers who are part of every team. Yes, abiding to object-oriented principles definitely helps in making code readable, but this does not always translate into better performing applications. If hacked-up code produces great results, apply it without worrying whether another developer will have problems understanding it.”

I work for Farata Systems, a consulting company that makes a living by developing rich Internet applications utilizing Adobe Flex and AIR and Java EE. We are a small company (about 30 people). We do consulting as well as develop our own software (both commercial and open source).  The number 30 is important here. Many years ago, a respectful person taught me that until the company is under 30 people it’s efficient because there is no need to hire middlemen managers. The founders of the company can run the projects themselves, and there is no ballast.

After several years of running the company with two other geeks, I couldn’t agree more.  We can afford to cherry pick developers, which large company can’t.  I’ll tell you more – we can afford having people who don’t have to stick to design patterns just to ensure that Joe Smith who became a programmer after attending 6 months of vocational school will understand the code. We can afford to build teams not with code monkeys who were shoved into our throats “because XYZ is our offshore partner and we have to keep them busy”. We are also working with offshore developers, but only with those who can do the job and can read/write the code regardless if it belongs to M, V, or C tiers.

Design patterns were not created equal. It’s OK to bash Singletons.  They are easy to be blamed for being a replacement for global variables. But MVC is still considered to be good.  Unfortunately, it’s not about three tiers any longer. Java architects enjoy creating layers. They’ll be happy to explain anyone how these extra layers will make your application very configurable and flexible. Layers are best friends of consulting firms who have sharpened their skills in creating beautiful powerpoints with nice round-square rectangles filled with color gradients. Thick arrows going from left to right shows how “with our consulting company you’ll move from here to there in just a couple of years”. The arrows must leave no doubts in the minds of hiring managers that “these guys can do it”.

And most importantly, these multi-tiered diagrams will explain the hiring manager of a large corporation that it’s OK that Satish is weak on the front end and Boris never worked with the back end…if you know what I mean. This multi-tiered design can turn both Satish and Boris into code monkeys who will do nothing but inserting their business logic into easy to understand location and the framework will do the rest. Design patterns promote the lowest-denominator-skills software development.

You may be surprised, but even such a sacred cow as dependency injections is not a must. Believe it or not, pretty much any application can be created without DI. I’m not kidding. No XML configuration files to process. Popularity of dependency injection in the middle tier is based on the necessity of integration techniques to allow upgrades and replacement of large pieces of technology with their new implementations. To be fair, I need to praise Java EE 6 for smart and light implementation of DI that doesn’t make you drown in XML.

Applying DI in the front-end applications on top of the frameworks with well designed event model is an overkill on the desktops and suicidal on smart phones and tablets that need to be optimized for memory and speed. We see bigger consultancies still doing it because it is a proven and easy to sell solution. Unfortunately, starting a new Flex project with an analysis of which MVC framework to choose seems to become a habit in enterprises.

My interview statement that writing the code that works is the ultimate goal is applicable only in teams that can afford to employ skilled professionals. If for whatever reason you can’t, go with the flow and rely on injections that somehow will put the collection of Orders into your Customer object.

Finally, to make this blog even more thought provoking, I’ll touch upon yet another sensitive subject. Who do you need to write code for – humans or computers?  On one hand, the code must be readable, cause the same piece of code is being read a lot more often than being written/modified. On the other, the code must be efficient.  For example, in financial trading applications adhering to design patterns is a low priority item. Speed is the king there.
Recently, I showed one chapter of my new Java tutorial to a very experienced Java developer. He was surprised that I included an example of BitSet there. This is what he said – word for word, “Perhaps your experience is different than mine, but I don’t think I’ve ever seen this class used in practice. It really feels a bit old-fashioned, and C-like. In 2010 I’m not sure anyone writing code in Java really worries about this level of saving bits. Maybe it still relevant in some embedded systems, but do those systems actually run Java?”

Ten years ago I was working on developing an equity trading system for a Wall Street company.  It was a J2EE application with a heavy use of messaging. A trading order had to be sent to a queue, and this was an object with about 50 fields with yes/no values.  Using BitSet for sending a set of flags (bits that are set to 1 or 0) instead of text or numbers is the most economical way to do this. Did I care that a programmer who’d be reading my code a year from now won’t immediately understand that just a couple of bytes carried had tons of information about the order? I did not. This piece of code was not readable, but efficient.

IMO, in the ideal world of inhabited by skilled software engineers, the code has to be written for computers. But we don’t live in the perfect world. So I don’t insist.

Yakov Fain

A new Kind of Java Tutorial is Almost Ready

During the last six months I had a pet project for Wiley Publishing. I’ve been writing a new Java tutorial. It’ll teach Java programming in a little bit different style than traditional Java books. But let me tell you what’s the title of the book: “Java Programming 24-Hour Trainer”.  I can almost hear the voices, “Yeah, yeah, yeah…Yet another promise to teach me Java in no time. How about teaching me Java in 24 minutes?”

This is not to state that you can learn the software covered in this book within 24 hours of studying. This is about having a trainer that’s with you 24 hours a day. This book is a set of short chapters with minimum amount of theory but with an instructional DVD, with screencasts recorded by yours truly. There is a screencast for each lesson except the last one.
This relatively small 500-page book consists of 38 lessons and covers both Core Java and Java EE 6.  Each lesson is from 10 to 15 pages long so you won’t even have time to fall asleep. Each screencast is from five to ten minute long so you won’t have time to get bored. At the end of this lesson is an assignment to complete. In this book I use Eclipse IDE and GlassFish v3 is the application server that I like.

Just look at these thirty eight lesson titles and give me a good reason why you shouldn’t be pre-ordering this book. Know Java already? Doesn’t really matter. I thought I knew it too before I started writing this book. Now I know it better. It’ll help the newbie’s to learn and seasoned Java programmers to refresh their knowledge, especially when it’s time to make a career move. These are the lesson titles:

1    Introducing Java
2    Eclipse IDE
3    Object-Oriented Programming
4    Class Methods
5    Back to Java Basics
6    Packages, Interfaces and Encapsulation
7    Programming with Abstract Classes and Interfaces
8    Introducing the Graphic User Interface
9    Event Handling in UI
10    Introduction to Java Applets
11    Developing a Tic-Tac-Toe Applet
12    Developing a Ping-Pong Game
13    Error Handling
14    Introduction to Collections
15    Introduction to Generics
16    Working with Streams
17    Java Serialization
18    Network Programming
19    Sending E-mails with Java
20    Introduction to Multi-threading
21    Digging Deeper into Concurrent Execution
22    Working with Databases Using JDBC
23    Swing with JTable
24    Annotations and Reflection
25    Remove Method Invocation
26    Java EE 6 Overview
27    Programming with Servlets
28    JavaServer Pages
29    Developing Web Applications with JSF
30    Introducing JMS and MOM
31     Introducing JNDI
32    Introduction to Enterprise JavaBeans
33    Introduction to Java Persistence API
34    Working with RESTful Web Services
35    Introduction to Spring MVC Framework
36    Introduction to Hibernate Framework
37    Bringing JavaFX to the mix
38    Java Technical Interviews

This book will hit the bookstores in February and you can pre-order it on Amazon at this address. I hope you’ll enjoy reading this book as much as I enjoyed writing it.

Yakov Fain

JavaOne != javaone

Tonight I’m going back home after attending JavaOne 2010. These are my fresh notes about this event.
If you are reading this, you know something about Java. At the very least you know that this is a case-sensitive programming language and the HelloWorld is not the same as helloworld. If you don’t know this much, consider listening my new audio podcasts “Java for Blondes“.


On the same note, Sun’s JavaOne was not the same as Oracle’s javaone. This year it’s a small conference. It felt small. Even though it’s a part of the huge Oracle Open World conference (41 thousand attendees), JavaOne crowd was modest. I don’t have the numbers, but based on my past experience. It seems that only between three and four thousands of Java people are here.  At the end of 90th, the peek attendance at JavaOne allegedly was around 15K, and in 2006 – 12K.

Forget about technical session attended by 500+ developers. Most of the auditoriums were for 100 or less attendees. Javaone 2010 had obvious symptoms of men disorder called Shrinkage .


The other thing I miss was the excitement. Didn’t feel it. Oracle is about business. I got a feeling that lawyers run Oracle, not engineers. Just read these evidences I’ve collected during these three days.

1. To get the wi-fi access, you’d have to read and agree to the following statement, ”Use of this Internet connection is intended solely for Oracle OpenWorld, Java One and Oracle Develop attendees. Unauthorized access or use may result in termination of your access, disciplinary action and/or civil or criminal penalties. To the extent permitted by law, your use may be monitored.” But guess what, Internet connection really worked! Now I know, that the wi-fi issues on other conferences are caused by criminal bastards that are sneaking into the event venues and perform unauthorized access.

2. Every slide deck of the presenters working for Oracle had a slide that started like this  “The preceding is intended to outline our general product directions. It is intended for information purposes only…” Basically they didn’t live me a chance to sue them if the syntax of closures in the project Lambda will change between now and release of Java 8 in 2012.

3. Before the Java keynote on Monday night, the voice have read pretty long message from the lawyers. This message was also conveniently displayed on the screen for deaf people.

4. Oracle employees are trained to say “No comments” to strangers. First, one of the Oracle people told me this at a party, and then, executive VP of product development has demonstrated this technique when asked about Gosling’s initiatives by Computer World.

Session Scheduling

I don’t know if Sun Microsystems made any profit on previous JavaOne’s, but for Oracle this conference is clearly business.  I’m not even talking about the airline-quality lunches. They wanted to save money on the venue. The rooms for presentations were smaller than needed and people who didn’t pre-registered for the talk routinely were standing in lines hoping to get in. I wouldn’t think it take a rocket scientist to predict that Brian Goetz will easily fill the room. Apparently I was wrong. After waiting in line for 15 minutes into the presentation I gave up.

People who planned the room/talks had no clue who is who in the Java community. Because of this, lots of talks were rescheduled . If you didn’t pre-register, upon arrival you could find out that this session is not here any longer. Where? Sorry apparently it was cancelled.  The scheduling and notification systems were poorly done.

One hands-on lab (was there more than one lab?) was rescheduled 20 minutes before it was supposed to start, and two hours later went as an instructor’s demo because of some technical issues. Unpreparedness.

The bright side

I didn’t pay for the conference pass. My kudos to Oracle for giving free passes to all Java Champions from around the world who wanted to come. I also enjoyed preferred seating at the JavaOne, private meeting with Olympic Champion Apolo Ohno, party with JUG leaders, and nice jacket with the JC logo. My special thanks to people at Oracle who are responsible for JUGs and Java Champions programs.


When I was walking to the Hilton hotel to register at JavaOne, I noticed these colorful pavement signs. Did you get the message? I did. Oracle Develop and JavaOne are moving in opposite directions. Yes, JavaOne was Cinderella at Oracle’s ball. But the Cindirella story had a happy end, remember? Pretty soon expect to see an online post addressed to Oracle regarding the future of JavaOne. Something’s gotta give.

Yakov Fain

The unofficial history of Java applets

Fifteen years ago there was no iPhone and Android. Web browsers were hot. Netscape market share was over 90% – they didn’t have competition.The situation changed when Microsoft has introduces Internet Explorer (me too, me too). Back in 1998, there was an infamous law suite between Microsoft and Sun Microsystems – the former started quietly introducing their own class libraries to Java breaking the write-once-run-anywhere idea of Sun that back then seemed to be achievable. Sun won that $10B law suite. But as the saying goes, they won the battle but lost the war.

Angry Microsoft refused to include upgrades to JVM that came with Internet Explorer, which seriously hurt applets popularity – the end user couldn’t just open a Web page to see the applet that required, say 1.3 version of JVM. They’d need to first download the proper version of JVM, and only then the applets that were written with the assumption that JVM 1.3 was available would work. The process of downloading the right JVM Plug-in was a multi-step process, and a truck driver from Alabama wouldn’t be able to go through it.

Update. Two days after I published this blog, the news broke that Oracle decided to sue Google for the “wrong use” of Java on Android platform. Does Larry Ellison have short memories? Sun literally killed Java on the desktop because of that old law suit with Microsoft. In the worst case scenario, if Oracle will win this law suit, Google may do the same thing as Apple did on the iOS and ban Java from this very promising Android platform. Given the fact that five years from now large portion of the applications will consist of a mobile device communicating with the cloud, Java will be seriously damaged. Imagine how many top-notch developers can be added to Java and JavaFX engineering teams at Oracle if the money spent on lawyers would be saved? Oracle, please stop!

High penetration of the required runtime environment and the ease of its upgrade are the crucial moments for any Web-based technology. Adobe Flash Player shines in this area today (sorry, Steve). Flash Player is also a virtual machine with a small memory footprint (1.5Mb), and its installation takes under 20 seconds after one button click. For years, the size of the JVM Plug-in was about 16Mb and install was complicated for a non-programmer, and (the rumor has it) – it’s a lot smaller now.

This situation has changed after the release of Java 6 update 10, which includes so called next-generation Java Plug-in.  Now applets don’t run in the JVM packaged with the Web browser, but run in a separate JVM launched by the Java Plug-in. The applet still appears in the Web browser’s window, but now it doesn’t depend on the goodwill of the browser vendor to include the latest Plug-in. You can read more about this Java Plug-in at

The other major change introduced in the next-generation Java Plug-In is ability to launch Java applets directly from JNLP (Java Network Launch Protocol) files, which in the previous releases were used only in Java Web Start technology that allowed local deployment of the applications over the network. As of Java 10.6.10 you can use the JNLP meta descriptors to launch applets too. JNLP support is described in details at

Earlier versions of HTML standard included the tag <applet> to incorporate Java applets into HTML page. But as of HTML 4.01 this tag has been deprecated and you should use the tags <object> for users who like Internet Explorer or <embed> for other Web browsers. But Oracle, the company behind Java, recommends using <applet> for Web pages accessed through the Internet and <object> or <embed> for intranet-based Web sites. The main reason being that Web browser vendors are infamous for being inconsistent of implementing HTML standards, and it’s safer to use tried and true <applet> tag to get predictable look and feel of the Web pages that host Java applets. But intranet is a more controlled environment. You can read about the differences of embedding applets with these tags at When young and old kids (sorry Steve) tell that HTML 5 will change the world, it’s funny.

The deployment options for applets have been extended as of release of Java 6 update 10. To learn all the options of applet deployment in depth, refer to the Oracle document titled “Java Rich Internet Applications Deployment Advice” available at

What’s the next step in applet’s evolution? You’ll be creating UI for the Web-based applications with a relatively new language called JavaFX. In a month, I’ll be trying to attend every JavaFX technical session at JavaOne conference to see if it’ll become a real competition to Adobe Flex and Microsoft Silverlight. By the way, anyone heard any noise about Apple not letting JVM on the iPhone? Neither did I. Do you know why?

If you’re not into Java applets, consider attending our Third Annual Enterprise Flex Symposium in New York City. It’s a small event where attendees and presenters will talk turkey about Adobe Flex.

Yakov Fain

A Quick Tutorial on Casting

Recently, I’ve been teaching a class and one of the students stopped by after the class and said, “I’m just learning object-oriented programming, can you explain me the benefits of casting?”. How would you answer such a question? I did my best in a short period of time I had, but felt obligated to give better explanations and wrote this blog. I’ve been using example from Java language here, but all this apply to other object-oriented languages too.

All Java classes form an inheritance tree with the class Object on top of the hierarchy – all Java classes are direct or indirect descendants of Object. When you declare a non-primitive variable, you are allowed to use either the exact data type of this variable or one of its ancestor data types. For example, if the class NJTax extends Tax each of the following lines is correct.

NJTax myTax1 = new NJTax();
Tax myTax2 = new NJTax(); // upcasting
Object myTax3 = new NJTax(); // upcasting

Java is smart enough to automatically cast an instance of the class to its ancestor. When the variable has more generic class than an instance of the object it’s called upcasting. Let’s say the class object has ten methods and class variables defined, the class Tax (it’s an implicit subclass of Object) adds five more methods and variables (total 15), and NJTax adds another two (total 17). The variable myTax1 will have access to all 17 methods and variables, myTax2 will see only 15, and myTax3 just 10. Why not always use exact types in variable declarations?

Let’s say you need to write a program that will process the data about workers of a certain company. Some of them are full time employees, and some are contractors, but you’d like to read them from some data source and into the same array. Arrays can store only the objects of the same type, remember?

Since Java can automatically upcast the objects, you can create a class Person with two subclasses: Employee and Contractor, and then read the records from a database, and based on the employment type, create an appropriate object instance and put it into an array of type Person:

Person workers[] = new Person [100];
workers[0] = new Employee(“Yakov”, “Fain”);
workers[1] = new Employee(“Mary”, “Lou”);
workers[2] = new Contractor(“Bill”, “Shaw”);

Of course, you could’ve created two separate arrays for employees and contractors, but I’m laying the foundation here for explaining polymorphism – a powerful concept of object-oriented languages.

At some point you’ll need to process the data from the array workers. Say, in a loop you can test the data type of the current element of the array with the operator instanceOf, then downcast the object (it can’t be done automatically) to Employee or Contractor, and process it accordingly.

for (int i; i<20; i++){
Employee currentEmployee;
Contractor currentContractor;

if (worksers[i] instanceof Employee){
currentEmployee = (Employee) workers[i];
// do some employee processing here
} else if (worksers[i] instanceof Contractor){
currentContractor = (Contractor) workers[i];
// do some contractor processing here

Placing a data type in parenthesis in front of another object means that you want to downcast this object to specified type. You can downcast an object only to one of its descendant data types. Even though the above code has correct syntax, it doesn’t represent the best practice of processing similar objects. In the next lesson you’ll see how to use polymorphism to do it in a more generic way.
If a class implements an interface, you can cast it to this interface. Say, a class Employee implements Payable, Insurable, Pensionable interfaces:

class Employee implements Payable, Insurable, and Pensionable {
// implementation of all interfaces goes here

If in particular code you are interested in its Insurable behavior, there’s not need to cast the Object to type Employee, just cast it to Insurable type as shown in the code fragment below. Keep in mind though that if you do so, the variable current employee will expose the access to only those methods that were declared in the Insurable interface.

Insurable currentEmployee;

if (worksers[i] instanceof Employee Insurable){
currentEmployee = (Insurable) workers[i];
// do some insurance-specific processing here

Is it clear enough? I’d appreciate your feedback.

Yakov Fain

Think twice before declaring a Java method as final

If you create classes that may be used by other developers, declaring methods as final will make them not overridable in the subclasses.


While today, it may seem obvious to you that a particular method will never ever need to be overridden, you might not properly predict all use-patterns of this class. If this happens, some other developer will have to jump through the hoops to create another version of such a method in a subclass. If you don’t want to be cursed in the future, think twice if you really really want to declare this method as final. Do you see any benefits in using final methods?
We had to extend a third party library to improve their implementation of a certain networking protocol. As it usually happens, the code was poorly documented, so we had to read the code to find out which method to override in the subclass. Sure enough, that method was declared as final.

We found a workaround and still replaced the call to the final method to the call to our own. So what the original developer achieved by using final? He made our work more difficult than it should have been.


Originally, Java compiler was optimizing (inlining) final methods. Today I’ve learned (thank you, Heinz) that Java compiler doesn’t do it anymore, and they are optimized by the Hotspot JVM:

Who are these guys we’re protecting from by using final? BTW, I also believe that the keyword protected is equally useless.


Yakov Fain

Upcoming public Flex training and New Jersey User Groups

1.    Last year, the Princeton Java Users Group  that I’m leading became homeless. We lost the host that was giving us a place to meet and pizza.
2.    Last year, New Jersey Flex Users group ceased to exist – not sure why.  The Garden State, where every other person is in IT deserves better.
3.    Being a proud Jersey resident, the next week will be the second time I’m presenting this year… at Atlanta Flex User Group Atlanta. No, it’s not Atlantic City, NJ.  It’s Georgia.
4.    Flex and Java nicely compliment each other in lots and lots of real-world enterprise projects in the greater New York Area, which wouldn’t be able to run its IT operations without us, Jersey hero commuters who spent 3.5-4 hours a day getting through the tunnels and bridges to that famous island and back.
5.    Recruiters have hard times finding developers with Flex/Java skills.
6.    I’m ready to create and run a new Flex and Java Users Group in Central Jersey as soon as someone will offer a place to meet and pizza to eat. It has to be a meeting room that can fit at least 30 people.  This is all I’m asking for. The hosting company will be entitled for opening 5 minutes of each meeting announcing their products, or job openings. And people who attend users groups are real developers! If interested, send me an email at yfain11 at
7.    My role is to bring qualified presenters and present myself on the subjects that interest enterprise Flex and Java Developers.
8.    All of the above is a just part of my contribution to Flex and Java community.
9.    Now let me take care of the bills. I’ll be running a week of live online introductory Flex 4 training on the week of July 12, 2010. You can attend without the need to travel.  For details and registration visit this site.
10.    The next one-day advanced public Flex workshop on modularization of Flex applications will take place in Lansdowne Resort, VA on July 27, a day before the CFUnited conference starts in the same venue ( this workshop is not affiliated with CFUnited). Here’s the registration page.

11. In August-September I’ll be running a week of online live Intro to Java class – stay tuned.

That’s all folks. See you in one of the meeting rooms.

Yakov Fain

Our new Flex book is a Java bestseller

Our new book “Enterprise Development with Flex ” made the Amazon bestseller’s list of … Java books:

This list is refreshed every hour so I’m not sure what place you are going to find it at, but at the time of this writing it’s #20.

Help us to move up the list by doing you know what :)

GM IT restructuring: I’m not convinced

Information Week has published an interview with GM’s CIO discussing the impact of the bankruptcy on the two-billion-IT operations of this huge corporation .
After reading this article, I’m pretty sure that GM’s IT is doomed. The chances are slim that they will turn themselves into leaner and agile organization as it should be in 21st century.

The article reveals “In 2006, GM awarded about $7B (!) in IT contracts to EDS, Capgemini, Hewlett-Packard, IBM and others, and earmarked another $7 billion or so for additional contracts in following years. Szygenda has a history of demanding that outsourcers change their operational practices to fit GM’s needs. One example is their creation of global teams to work on GM accounts”.

Now let me explain how I read this interesting paragraph. These leeches , a.k.a. global consulting firms were charging $200p/h for mediocre consultants and were able to suck $7B worth of blood out of GM and are ready to continue enjoying the party. If you’ll tell me that I’m going over board with $200, let me explain how it might looked on paper – five inexpensive offshore resources at $40p/h each. Can you imagine, in India you can hire a project manager for only $40p/h! It’s like dream come true.

But let me ask you, my dear typical Fortune-500 CIO, “Why did you need that project manager in the first place?”
“Yakov, don’t act silly.  He’d manage a team of 4 developers for this job”
“Why did you need this team?”
“It’s required as per the approved architecture and the project plan provided by our consulting partners”
Sure, it started even before the project plan with dead souls from overseas (see )was carefully baked into it.

Most likely, it started when these nicely dressed salesmen showed up at GM armed (and dangerous) with beautifully prepared powerpoint presentations showing “where you are now” and “where you want to be in a year, two years, and even five years”. Yes, they knew all the answers. And here’s the road map that will bring you from point A to point B with the help of Global Leeches Ltd.
The visitors would continue, “If you’d hire American resources for the same job, it would cost you $15B, but we can deliver the same suite of products and services for mere $7B.”

Sounds like a good deal, and the orgy of the vampires begins.

The Information Week’s article states that GM awarded $7B in 2006, but you’ll never learn such classified information as how much of this amount was spent on the projects that failed.
Another hint that GM’s IT is doomed is the statement about creation of the global teams. The combination of two innocent words global and team gives me goose bumps.  I don’t believe in global teams.

I’m one of the partners running a small company, and we’ve learned our lesson and would never hire a global team. We cherry pick individuals, put them through THE SAME tough interviewing process as local candidates would go through. We manage individuals. This model works for us just fine.
During the last (tough) year, majority of our clients were not large corporations, but the small ones, and we found the explanation. Solutions that we offer are based on simple architectures that do not require bringing a bunch of consultants lead by a full time manager.   We give our customers an economical solution.

Interestingly enough, when we present our solutions to small companies running on a very limited budget, they are well received by these companies that must count their money. But if we’d present the same solution to a large IT shop, it would not fly. Why? Because individuals and small companies appreciate real costs, track record and simplicity as main artifacts of “real cost of ownership”. Large organizations are more concerned with imaginary artifacts of “savings”, “discounts” and “proven architecture” while keeping large outsourcing budget as it’s easily justifies their IT portion of “managing”.

People in the enterprise architectural committee will quickly “get the message” and will look for technical solutions that can be illustrated with some “serious” architectural diagrams that would help in proving… the need of having a full time architectural committee. But realistically that would inflate the efforts to the extent that would help these individuals in achieving their career objectives pleasing the C-level management at the same time.

The rest of the answers by Mr. Szygenda (GM’s CIO) just confirms that he’s not a leader that GM needs at these trying times. He quotes the statements of the CEO who believes this and that. We know were his believes brought the company. The CIO uses the words could and probably too often.

I see no hope there.

Yakov Fain